Submission #75225

#TimeUsernameProblemLanguageResultExecution timeMemory
75225bogdan10bosSnake Escaping (JOI18_snake_escaping)C++14
100 / 100
1476 ms46376 KiB
#include <bits/stdc++.h> using namespace std; //#define FILE_IO int N, Q, ans; int i, j, q, msk; int cnt[3]; int val[1100005], dp[1100005], dp2[1100005]; int bts[1100005]; int B, b[25]; char s[1100005]; void bck0(int pas, int msk, int smn) { if(pas >= B) { ans += smn * dp[msk]; return; } bck0(pas + 1, msk, smn); bck0(pas + 1, msk ^ (1 << b[pas]), -smn); } void bck1(int pas, int msk, int smn) { if(pas >= B) { ans += smn * dp2[msk]; return; } bck1(pas + 1, msk, smn); bck1(pas + 1, msk ^ (1 << b[pas]), -smn); } void bckq(int pas, int msk) { if(pas >= B) { ans += val[msk]; return; } bckq(pas + 1, msk); bckq(pas + 1, msk ^ (1 << b[pas])); } int main() { #ifdef FILE_IO freopen("1.in", "r", stdin); freopen("1.out", "w", stdout); #endif scanf("%d%d\n", &N, &Q); scanf("%s\n", s); for(i = 0; i < (1 << N); i++) val[i] = dp[i] = dp2[i] = s[i] - '0'; for(j = 0; j < N; j++) for(i = (1 << N) - 1; i >= 0; i--) if( (i & (1 << j)) == 0 ) dp[i] += dp[i ^ (1 << j)]; for(j = 0; j < N; j++) for(i = 0; i < (1 << N); i++) if( (i & (1 << j)) != 0 ) dp2[i] += dp2[i ^ (1 << j)]; for(q = 1; q <= Q; q++) { scanf("%s\n", s); reverse(s, s + N); cnt[0] = cnt[1] = cnt[2] = 0; for(j = 0; j < N; j++) { if(s[j] == '0') cnt[0]++; else if(s[j] == '1') cnt[1]++; else if(s[j] == '?') cnt[2]++; } if(cnt[0] < cnt[1] && cnt[0] < cnt[2]) { msk = 0; B = 0; for(i = 0; i < N; i++) { if(s[i] == '1') msk |= (1 << i); if(s[i] == '0') b[B++] = i; } ans = 0; bck0(0, msk, 1); printf("%d\n", ans); } else if(cnt[1] < cnt[2]) { msk = 0; B = 0; for(i = 0; i < N; i++) { if(s[i] == '1') { msk |= (1 << i); b[B++] = i; } if(s[i] == '?') msk |= (1 << i); } ans = 0; bck1(0, msk, 1); printf("%d\n", ans); } else { msk = 0; B = 0; for(i = 0; i < N; i++) { if(s[i] == '?') b[B++] = i; else msk |= ((s[i] - '0') << i); } ans = 0; bckq(0, msk); printf("%d\n", ans); } } return 0; }

Compilation message (stderr)

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:58:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d\n", &N, &Q);
     ~~~~~^~~~~~~~~~~~~~~~~~
snake_escaping.cpp:59:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s\n", s);
     ~~~~~^~~~~~~~~~~
snake_escaping.cpp:73:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s\n", 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...