Submission #331814

#TimeUsernameProblemLanguageResultExecution timeMemory
331814daniel920712Snake Escaping (JOI18_snake_escaping)C++14
100 / 100
1955 ms55660 KiB
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <vector> #include <string.h> #include <map> #include <utility> #include <algorithm> #include <stack> #include <queue> using namespace std; char all[1148576]; char tt[25]; int con1[2][1100005]; int con2[2][1100005]; int Con1[1100005]; int Con2[1100005]; int ans=0; int N; vector < int > xxx; vector < pair < int , int > > BFS,ttt; int main() { //freopen("05-04.txt","rt",stdin); //freopen("aa.txt","w+t",stdout); int M,i,j,ok,a,b,c,x,y,z,con=0,xx; scanf("%d %d",&N,&M); scanf("%s",all); for(i=0;i<(1<<N);i++) con2[0][i]=con1[0][i]=all[i]-'0'; for(i=0;i<N;i++) { for(j=0;j<(1<<N);j++) { con1[1-i%2][j]=con1[i%2][j]; con2[1-i%2][j]=con2[i%2][j]; if(j&(1<<i)) con1[1-i%2][j]+=con1[i%2][j-(1<<i)]; else con2[1-i%2][j]+=con2[i%2][j+(1<<i)]; } } for(j=0;j<(1<<N);j++) { Con1[j]=con1[N%2][j]; Con2[j]=con2[N%2][j]; } while(M--) { scanf("%s",tt); BFS.clear(); ans=0; a=0; b=0; c=0; for(i=0;i<N;i++) { if(tt[i]=='?') a++; else if(tt[i]=='1') b++; else c++; } xxx.clear(); con=0; if(b<=a&&b<=c) { //printf("aa\n"); for(i=0;i<N;i++) { if(tt[i]=='1') xxx.push_back((1<<(N-i-1))); else if(tt[i]=='?') con+=(1<<(N-i-1)); } BFS.push_back(make_pair(con,0)); for(auto i:xxx) { ttt.clear(); for(auto &j:BFS) { ttt.push_back(make_pair(j.first+i,j.second)); j.second^=1; } for(auto j:ttt) BFS.push_back(j); } for(auto i:BFS) { if(i.second) ans-=Con1[i.first]; else ans+=Con1[i.first]; } } else if(a<=b&&a<=c) { for(i=0;i<N;i++) { if(tt[i]=='?') xxx.push_back((1<<(N-i-1))); else if(tt[i]=='1') con+=(1<<(N-i-1)); } BFS.push_back(make_pair(con,0)); for(auto i:xxx) { ttt.clear(); for(auto &j:BFS) ttt.push_back(make_pair(j.first+i,j.second)); for(auto j:ttt) BFS.push_back(j); } for(auto i:BFS) ans+=(all[i.first]-'0'); } else if(c<=b&&c<=a) { for(i=0;i<N;i++) { if(tt[i]=='0') xxx.push_back((1<<(N-i-1))); else if(tt[i]=='1') con+=(1<<(N-i-1)); } BFS.push_back(make_pair(con,0)); for(auto i:xxx) { ttt.clear(); for(auto &j:BFS) ttt.push_back(make_pair(j.first+i,j.second^1)); for(auto j:ttt) BFS.push_back(j); } for(auto i:BFS) { if(i.second) ans-=Con2[i.first]; else ans+=Con2[i.first]; } } printf("%d\n",ans); } return 0; }

Compilation message (stderr)

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:27:15: warning: unused variable 'ok' [-Wunused-variable]
   27 |     int M,i,j,ok,a,b,c,x,y,z,con=0,xx;
      |               ^~
snake_escaping.cpp:27:24: warning: unused variable 'x' [-Wunused-variable]
   27 |     int M,i,j,ok,a,b,c,x,y,z,con=0,xx;
      |                        ^
snake_escaping.cpp:27:26: warning: unused variable 'y' [-Wunused-variable]
   27 |     int M,i,j,ok,a,b,c,x,y,z,con=0,xx;
      |                          ^
snake_escaping.cpp:27:28: warning: unused variable 'z' [-Wunused-variable]
   27 |     int M,i,j,ok,a,b,c,x,y,z,con=0,xx;
      |                            ^
snake_escaping.cpp:27:36: warning: unused variable 'xx' [-Wunused-variable]
   27 |     int M,i,j,ok,a,b,c,x,y,z,con=0,xx;
      |                                    ^~
snake_escaping.cpp:28:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   28 |     scanf("%d %d",&N,&M);
      |     ~~~~~^~~~~~~~~~~~~~~
snake_escaping.cpp:29:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   29 |     scanf("%s",all);
      |     ~~~~~^~~~~~~~~~
snake_escaping.cpp:49:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   49 |         scanf("%s",tt);
      |         ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...