atcoder エイジングプログラミングコンテスト D問題が解けず、解説を見て実装してみたのですが、うまくいきません。
https://atcoder.jp/contests/aising2020/tasks/aising2020_d
いろいろ試行錯誤し、RE や TLE は回避できたのですが、WA が出てしまいます。
よければ下のコードで何がおかしいのか指摘してもらえるとうれしいです。よろしくお願いします。
c++
1#include<iostream> 2#include<stdio.h> 3#include<algorithm> 4#include<string> 5#include<map> 6#include<vector> 7#define rep(i, n) for(int i=0; i<n; i++) 8#define rep_one(i, n) for(int i=1; i<n; i++) 9using namespace std; 10typedef long long ll; 11 12int solve(int x, int count){ 13 if(x == -1) return 0; 14 if(x == 0) return count; 15 int y = x; 16 int pc = 0; 17 while(y != 0){ 18 pc += y%2; 19 y /= 2; 20 } 21 return solve(x%pc, count+1); 22} 23 24int main(){ 25 int n; cin >> n; 26 string x; cin >> x; 27 ll xp=0, xm=0; 28 int pc=0; 29 int x_list[n]; 30 rep(i, n){ 31 x_list[i] = (int)(x[i]-'0'); 32 pc += x_list[i]; 33 } 34 rep(i, n){ 35 xp = (xp*2)%(pc+1); 36 xp += x_list[i]; 37 if(pc-1 > 0){ 38 xm = (xm*2)%(pc-1); 39 xm += x_list[i]; 40 } 41 } 42 int xi[n]; 43 ll tmp=1; 44 rep(i, n) tmp *= 2; 45 rep(i, n){ 46 tmp /= 2; 47 if(x_list[i]){ 48 if(pc-1 < 1){xi[i]=-1; continue;} 49 xi[i] = (xm-tmp+pc-1)%(pc-1); 50 }else{ 51 xi[i] = (xp+tmp)%(pc+1); 52 } 53 } 54 rep(i, n){ 55 cout << solve(xi[i], 1) << endl; 56 } 57}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/15 14:07