Submission #80211

#TimeUsernameProblemLanguageResultExecution timeMemory
80211Bodo171Snake Escaping (JOI18_snake_escaping)C++14
75 / 100
983 ms66560 KiB
#include <cstdio> #include <iostream> using namespace std; const int nmax=(1<<20)+5; char s[22],str[nmax]; char t; char pc[nmax],v[nmax]; int sub[nmax],supra[nmax]; int l,q,i,j,m0,m1,mq,mn,ans; bool brk; int main() { //freopen("data.in","r",stdin); scanf("%d%d",&l,&q); scanf("%s",&str); for(i=0;i<(1<<l);i++) { if(i!=0) pc[i]=pc[(i&(i-1))]+1; sub[i]=supra[i]=v[i]=str[i]-'0'; } for(i=0;i<l;i++) for(j=0;j<(1<<l);j++) if(((1<<i)&j)) sub[j]+=sub[(j^(1<<i))]; else supra[j]+=supra[(j^(1<<i))]; for(int cnt=1;cnt<=q;cnt++) { scanf("%s",&s); m0=m1=mq=0; for(j=l-1;j>=0;j--) { t=s[l-1-j]; if(t=='0') m0+=(1<<j); else if(t=='1') m1+=(1<<j); else mq+=(1<<j); } mn=min(min(pc[m0],pc[m1]),pc[mq]); ans=0;brk=0; if(mn==pc[m0]) { ans=supra[m1]; i=m0; while(i!=0) { if((pc[i]&1)) ans-=supra[(i|m1)]; else ans+=supra[(i|m1)]; i=((i-1)&m0); } } else { if(mn==pc[m1]) { i=m1; while(!brk) { if(i==0) brk=1; if(((pc[m1]-pc[i])&1)) ans-=sub[(i|mq)]; else ans+=sub[(i|mq)]; i=((i-1)&m1); } } else { i=mq; while(!brk) { ans+=v[(m1|i)]; if(i==0) brk=1; i=((i-1)&mq); } } } printf("%d\n",ans); } return 0; }

Compilation message (stderr)

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:16:20: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'char (*)[1048581]' [-Wformat=]
     scanf("%s",&str);
                ~~~~^
snake_escaping.cpp:30:22: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'char (*)[22]' [-Wformat=]
         scanf("%s",&s);
                    ~~^
snake_escaping.cpp:15:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&l,&q);
     ~~~~~^~~~~~~~~~~~~~
snake_escaping.cpp:16:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s",&str);
     ~~~~~^~~~~~~~~~~
snake_escaping.cpp:30:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s",&s);
         ~~~~~^~~~~~~~~
#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...