Submission #158880

#TimeUsernameProblemLanguageResultExecution timeMemory
158880ioaneSnake Escaping (JOI18_snake_escaping)C++14
5 / 100
2053 ms65536 KiB
#include<bits/stdc++.h> #define F first #define S second #define LL int #define MP make_pair #define PB push_back #define I insert const LL N = 1600000; using namespace std; LL n, m, i, j, k, l, r, t, x, y, w, ans; LL a[N], dp[130][N], x3[20]; char c; int main(){ x3[0] = 1; for ( i = 1; i < 20; ++i ){ x3[i] = x3[i-1] * 3; } cin >> n >> m; for ( i = 0; i < (1<<n); ++i ){ cin >> c; a[i] = c - '0'; } k = min(n,13); for ( w = 0; w < (1<<(n-k)); ++w ){ for ( i = 0; i < x3[k]; ++i ){ t = i; l = 0; for ( j = 0; j < k; ++j ){ r = t % 3; if ( r == 2 ){ dp[w][i] = dp[w][i - x3[j]] + dp[w][i - 2*x3[j]]; l = -100; break; } l += (1<<(j)) * r; t /= 3; } if ( l >= 0 ){ dp[w][i] = a[l+(w<<(k))]; } //cout << i << " " << dp[i] << " " << l << endl; } } while ( m-- ){ t = 0; for ( i = 0; i < k; ++i ){ cin >> c; t *= 3; if ( c == '?' ) t += 2; else t += c - '0'; } ans = 0; for ( i = 0; i < (1<<(n-k)); ++i ){ ans += dp[i][t]; } cout << ans << endl; } return 0; }
#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...