#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,O3")
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FORR(i,a,b) for(int i=a;i>=b;i--)
#define S second
#define F first
#define pb push_back
#define SZ(x) (int)x.size()
#define all(x) x.begin(),x.end()
#define err(x) cout<<#x<<": "<<x<<'\n';
using namespace std;
const int Q=1e6+4;
const int N=1050000;
int ans[Q];
int A[N];
char qu[Q][21];
int l,q;
int n;
int pw[21];
int Lg[N];
int F[N];
void solve(){
FOR(i,0,n-1) F[i]=A[i];
FOR(i,0,l-1) FOR(msk,0,n-1)
if(msk&pw[i]) F[msk]+=F[msk^pw[i]];
int dp0[N];
FOR(i,0,n-1) dp0[i]=F[i^(n-1)];
FOR(i,0,q-1) if(ans[i]==-1){
int tq(0),t[2]={};
FOR(j,0,l-1) if(qu[i][j]=='?') tq++; else t[qu[i][j]-'0']++;
if(tq<=7){
ans[i]=0;
vector<int> qq;
int K=0;
FOR(j,0,l-1) if(qu[i][j]=='?') qq.pb(j); else if(qu[i][j]=='1') K+=pw[j];
FOR(j,0,pw[tq]-1){
int J=j;
int k=K;
while(J){
k+=pw[qq[Lg[(J&(-J))]]];
J-=(J&(-J));
}
ans[i]+=A[k];
}
}else if(t[0]>=t[1]){
ans[i]=0;
vector<int> qq;
int K=0;
FOR(j,0,l-1) if(qu[i][j]=='0') K+=pw[j]; else if(qu[i][j]=='1') qq.pb(j);
FOR(j,0,pw[t[1]]-1){
int J=j;
int k=K;
int t=0;
while(J){
k+=pw[qq[Lg[(J&(-J))]]];
t++;
J-=(J&(-J));
}
if(t&1) ans[i]-=dp0[k];
else ans[i]+=dp0[k];
}
}
}
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0);
pw[0]=1; FOR(i,1,20) pw[i]=2*pw[i-1];
FOR(i,0,20) Lg[pw[i]]=i;
cin>>l>>q;
n=pw[l];
FOR(i,0,q) ans[i]=-1;
//string s0; cin>>s0;
FOR(i,0,n-1) A[i]=getchar()-'0'; getchar();
FOR(i,0,q-1){
//string x0; cin>>x0; qu.pb(x0);
FOR(j,0,l-1) qu[i][j]=getchar();
FOR(j,0,l-1){
if(((l-1)-j)<=j) break;
swap(qu[i][j],qu[i][((l-1)-j)]);
}
getchar();
}
solve();
FOR(i,0,n-1){
if((i^(n-1))<=i) break;
swap(A[i],A[(i^(n-1))]);
}
FOR(i,0,q-1){
FOR(j,0,l-1) if(qu[i][j]!='?') qu[i][j]=((1-(qu[i][j]-'0'))+'0');
}
solve();
FOR(i,0,q-1) cout<<ans[i]<<'\n';
return 0;
}
Compilation message
snake_escaping.cpp: In function 'int32_t main()':
snake_escaping.cpp:3:20: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
3 | #define FOR(i,a,b) for(int i=a;i<=b;i++)
| ^~~
snake_escaping.cpp:77:2: note: in expansion of macro 'FOR'
77 | FOR(i,0,n-1) A[i]=getchar()-'0'; getchar();
| ^~~
snake_escaping.cpp:77:35: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
77 | FOR(i,0,n-1) A[i]=getchar()-'0'; getchar();
| ^~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
4428 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
4428 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
4428 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
4428 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
4428 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |