Submission #964783

#TimeUsernameProblemLanguageResultExecution timeMemory
964783BaytoroSnake Escaping (JOI18_snake_escaping)C++17
75 / 100
2019 ms52420 KiB
#include <bits/stdc++.h> using namespace std; #define ios ios::sync_with_stdio(false); cin.tie(NULL); #define pb push_back #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define fr first #define sc second //#define mp make_pair #define ll long long #define int ll //#define double long double //const ll INF=1e18,N=1e6+5; int dp[(1<<20)+5][2]; void solve(){ int n,q;cin>>n>>q; string s;cin>>s; vector<int> a((1<<n)+5); for(int i=0;i<(1<<n);i++) a[i]=(s[i]-'0'); for(int i=0;i<(1<<n);i++) dp[i][0]=dp[i][1]=a[i]; for(int i=0;i<n;i++){ for(int mask=0;mask<(1<<n);mask++){ if(mask&(1<<i)) dp[mask][0]+=dp[mask^(1<<i)][0]; else dp[mask][1]+=dp[mask^(1<<i)][1]; } } while(q--){ string st;cin>>st;reverse(all(st)); int z=0,o=0,u=0; for(int i=0;i<st.size();i++){ if(st[i]=='?') u++; else if(st[i]=='0') z++; else o++; } int sum=0,ans=0; vector<int> tmp; if(u<=z && u<=o){ for(int i=0;i<n;i++){ if(st[i]=='1') sum+=(1<<i); if(st[i]=='?') tmp.pb(1<<i); } for(int i=0;i<(1<<tmp.size());i++){ int tmpsum=sum; for(int j=0;j<tmp.size();j++){ if(i&(1<<j)) tmpsum+=tmp[j]; } ans+=a[tmpsum]; } } else if(o<=z && o<=u){ for(int i=0;i<n;i++){ if(st[i]=='1' || st[i]=='?') sum+=(1<<i); if(st[i]=='1') tmp.pb(1<<i); } for(int i=0;i<(1<<tmp.size());i++){ int tmpsum=sum,c=0; for(int j=0;j<tmp.size();j++){ if(i&(1<<j)){ tmpsum^=(tmp[j]); c++; } } if(c%2) c=-1; else c=1; ans+=c*dp[tmpsum][0]; } } else{ for(int i=0;i<n;i++){ if(st[i]=='1') sum+=(1<<i); if(st[i]=='0') tmp.pb(1<<i); } for(int i=0;i<(1<<tmp.size());i++){ int tmpsum=sum,c=0; for(int j=0;j<tmp.size();j++){ if(!(i&(1<<j))){ tmpsum^=(tmp[j]); c++; } } if(c%2) c=-1; else c=1; ans+=c*dp[tmpsum][1]; } } cout<<ans<<endl; } } signed main(){ int t=1;//cin>>t; while(t--) solve(); }

Compilation message (stderr)

snake_escaping.cpp: In function 'void solve()':
snake_escaping.cpp:30:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |   for(int i=0;i<st.size();i++){
      |               ~^~~~~~~~~~
snake_escaping.cpp:44:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |     for(int j=0;j<tmp.size();j++){
      |                 ~^~~~~~~~~~~
snake_escaping.cpp:57:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     for(int j=0;j<tmp.size();j++){
      |                 ~^~~~~~~~~~~
snake_escaping.cpp:75:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |     for(int j=0;j<tmp.size();j++){
      |                 ~^~~~~~~~~~~
#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...