Submission #315432

# Submission time Handle Problem Language Result Execution time Memory
315432 2020-10-22T21:53:22 Z aZvezda Snake Escaping (JOI18_snake_escaping) C++14
22 / 100
1594 ms 65540 KB
#include <bits/stdc++.h>
using namespace std;
//#pragma GCC optimize ("O3")
//#pragma GCC target ("sse4")
#define endl "\n"
typedef long long ll;
template<class T, class T2> inline ostream &operator <<(ostream &out, const pair<T, T2> &x) { out << x.first << " " << x.second; return out;}
template<class T, class T2> inline istream &operator >>(istream &in, pair<T, T2> &x) { in >> x.first >> x.second; return in;}
template<class T, class T2> inline bool chkmax(T &x, const T2 &y) { return x < y ? x = y, 1 : 0; }
template<class T, class T2> inline bool chkmin(T &x, const T2 &y) { return x > y ? x = y, 1 : 0; }
const ll mod = 1e9 + 7;
#define out(x) "{" << (#x) << ": " << x << "} "
 
const ll MAX_N = (1 << 20) + 10;
const ll MAX_RIGHT = 4800000; ll MAX_LEFT = 6;
int pow3[50];
int dp[MAX_RIGHT];
int price[MAX_N];
string queries[MAX_N];
int ans[MAX_N];
int n, q;
char first2[MAX_RIGHT];
int sum[MAX_RIGHT];
int rightPart[MAX_N];
 
void prec() {
	for(ll i = 0; i < q; i ++) {
		ll currMask = 0;
		for(ll j = n - 1; j >= MAX_LEFT; j --) {
			currMask *= 3;
			currMask += (ll)(queries[i][j] - '0');
		}
		rightPart[i] = currMask;
	}
 
	ll triBits = n - MAX_LEFT;
	for(ll i = 0; i < pow3[triBits]; i ++) {
		bool flag = false;
		for(ll j = triBits - 1; j >= 0; j --) {
			if((i / pow3[j]) % 3 == 2) {
				first2[i] = j;
				flag = true;
				break;
			}
		}
		if(!flag) {
			ll currMask = 0;
			for(ll j = triBits - 1; j >= 0; j --) {
				currMask += ((i / pow3[j]) % 3) * (1 << (j + MAX_LEFT));
			}
			sum[i] = currMask;
			first2[i] = -1;
		}
	}
}
 
void getAns(ll mask) {
	vector<ll> indices;
	for(ll i = 0; i < q; i ++) {
		for(ll j = 0; j < MAX_LEFT; j ++) {
			if(mask & (1 << j)) {
				if(queries[i][j] == '0') {
					break;
				}
			} else {
				if(queries[i][j] == '1') {
					break;
				}				
			}
			if(j == MAX_LEFT - 1) {
				indices.push_back(i);
			}
		}
	}
	
	ll triBits = n - MAX_LEFT;
	for(ll i = 0; i < pow3[triBits]; i ++) {
		if(first2[i] != -1) {
			ll j = first2[i];		
			dp[i] = dp[i - pow3[j]] + dp[i - 2 * pow3[j]]; 
		} else {
			ll currMask = mask + sum[i];
			dp[i] = price[currMask];			
		}
	}
	
	for(auto it : indices) {
		ans[it] += dp[rightPart[it]];
	}
}
 
signed main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	pow3[0] = 1;
	for(ll i = 1; i < 50; i ++) {
		pow3[i] = pow3[i - 1] * 3ll;
	}
	cin >> n >> q;
	chkmin(MAX_LEFT, n);
	string in;
	cin >> in;
	for(ll i = 0; i < (1 << n); i ++) {
		price[i] = in[i] - '0';
	}
	for(ll i = 0; i < q; i ++) {
		cin >> queries[i];
		reverse(queries[i].begin(), queries[i].end());
		for(auto &it : queries[i]) {
			if(it == '?') {
				it = '2';
			}
		}
	}
		
	prec();
	for(ll mask = 0; mask < (1 << MAX_LEFT); mask ++) {
		getAns(mask);
	}
	for(ll i = 0; i < q; i ++) {
		cout << ans[i] << endl;
	}
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 24 ms 33280 KB Output is correct
2 Correct 24 ms 33280 KB Output is correct
3 Correct 23 ms 33280 KB Output is correct
4 Correct 23 ms 33280 KB Output is correct
5 Correct 23 ms 33280 KB Output is correct
6 Correct 23 ms 33280 KB Output is correct
7 Correct 23 ms 33272 KB Output is correct
8 Correct 23 ms 33280 KB Output is correct
9 Correct 23 ms 33280 KB Output is correct
10 Correct 23 ms 33280 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 33280 KB Output is correct
2 Correct 24 ms 33280 KB Output is correct
3 Correct 23 ms 33280 KB Output is correct
4 Correct 23 ms 33280 KB Output is correct
5 Correct 23 ms 33280 KB Output is correct
6 Correct 23 ms 33280 KB Output is correct
7 Correct 23 ms 33272 KB Output is correct
8 Correct 23 ms 33280 KB Output is correct
9 Correct 23 ms 33280 KB Output is correct
10 Correct 23 ms 33280 KB Output is correct
11 Correct 1162 ms 53580 KB Output is correct
12 Correct 1225 ms 52788 KB Output is correct
13 Correct 1162 ms 46048 KB Output is correct
14 Correct 1275 ms 45024 KB Output is correct
15 Correct 1434 ms 45760 KB Output is correct
16 Correct 1332 ms 45212 KB Output is correct
17 Correct 1345 ms 44424 KB Output is correct
18 Correct 1594 ms 57468 KB Output is correct
19 Correct 1060 ms 43276 KB Output is correct
20 Correct 1233 ms 53328 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 33280 KB Output is correct
2 Correct 24 ms 33280 KB Output is correct
3 Correct 23 ms 33280 KB Output is correct
4 Correct 23 ms 33280 KB Output is correct
5 Correct 23 ms 33280 KB Output is correct
6 Correct 23 ms 33280 KB Output is correct
7 Correct 23 ms 33272 KB Output is correct
8 Correct 23 ms 33280 KB Output is correct
9 Correct 23 ms 33280 KB Output is correct
10 Correct 23 ms 33280 KB Output is correct
11 Correct 1162 ms 53580 KB Output is correct
12 Correct 1225 ms 52788 KB Output is correct
13 Correct 1162 ms 46048 KB Output is correct
14 Correct 1275 ms 45024 KB Output is correct
15 Correct 1434 ms 45760 KB Output is correct
16 Correct 1332 ms 45212 KB Output is correct
17 Correct 1345 ms 44424 KB Output is correct
18 Correct 1594 ms 57468 KB Output is correct
19 Correct 1060 ms 43276 KB Output is correct
20 Correct 1233 ms 53328 KB Output is correct
21 Correct 1304 ms 57108 KB Output is correct
22 Correct 1241 ms 53300 KB Output is correct
23 Correct 1235 ms 46164 KB Output is correct
24 Correct 1316 ms 45056 KB Output is correct
25 Correct 1376 ms 46452 KB Output is correct
26 Correct 1359 ms 45704 KB Output is correct
27 Correct 1346 ms 44900 KB Output is correct
28 Correct 1592 ms 57308 KB Output is correct
29 Correct 1078 ms 43488 KB Output is correct
30 Correct 1248 ms 53544 KB Output is correct
31 Correct 1373 ms 47528 KB Output is correct
32 Correct 1353 ms 46084 KB Output is correct
33 Correct 1016 ms 45152 KB Output is correct
34 Correct 1341 ms 44556 KB Output is correct
35 Correct 1363 ms 44772 KB Output is correct
36 Correct 453 ms 49132 KB Output is correct
37 Correct 1150 ms 52916 KB Output is correct
38 Correct 1100 ms 43352 KB Output is correct
39 Correct 1257 ms 44612 KB Output is correct
40 Correct 1322 ms 45276 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 33280 KB Output is correct
2 Correct 24 ms 33280 KB Output is correct
3 Correct 23 ms 33280 KB Output is correct
4 Correct 23 ms 33280 KB Output is correct
5 Correct 23 ms 33280 KB Output is correct
6 Correct 23 ms 33280 KB Output is correct
7 Correct 23 ms 33272 KB Output is correct
8 Correct 23 ms 33280 KB Output is correct
9 Correct 23 ms 33280 KB Output is correct
10 Correct 23 ms 33280 KB Output is correct
11 Runtime error 206 ms 65540 KB Execution killed with signal 9 (could be triggered by violating memory limits)
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 24 ms 33280 KB Output is correct
2 Correct 24 ms 33280 KB Output is correct
3 Correct 23 ms 33280 KB Output is correct
4 Correct 23 ms 33280 KB Output is correct
5 Correct 23 ms 33280 KB Output is correct
6 Correct 23 ms 33280 KB Output is correct
7 Correct 23 ms 33272 KB Output is correct
8 Correct 23 ms 33280 KB Output is correct
9 Correct 23 ms 33280 KB Output is correct
10 Correct 23 ms 33280 KB Output is correct
11 Correct 1162 ms 53580 KB Output is correct
12 Correct 1225 ms 52788 KB Output is correct
13 Correct 1162 ms 46048 KB Output is correct
14 Correct 1275 ms 45024 KB Output is correct
15 Correct 1434 ms 45760 KB Output is correct
16 Correct 1332 ms 45212 KB Output is correct
17 Correct 1345 ms 44424 KB Output is correct
18 Correct 1594 ms 57468 KB Output is correct
19 Correct 1060 ms 43276 KB Output is correct
20 Correct 1233 ms 53328 KB Output is correct
21 Correct 1304 ms 57108 KB Output is correct
22 Correct 1241 ms 53300 KB Output is correct
23 Correct 1235 ms 46164 KB Output is correct
24 Correct 1316 ms 45056 KB Output is correct
25 Correct 1376 ms 46452 KB Output is correct
26 Correct 1359 ms 45704 KB Output is correct
27 Correct 1346 ms 44900 KB Output is correct
28 Correct 1592 ms 57308 KB Output is correct
29 Correct 1078 ms 43488 KB Output is correct
30 Correct 1248 ms 53544 KB Output is correct
31 Correct 1373 ms 47528 KB Output is correct
32 Correct 1353 ms 46084 KB Output is correct
33 Correct 1016 ms 45152 KB Output is correct
34 Correct 1341 ms 44556 KB Output is correct
35 Correct 1363 ms 44772 KB Output is correct
36 Correct 453 ms 49132 KB Output is correct
37 Correct 1150 ms 52916 KB Output is correct
38 Correct 1100 ms 43352 KB Output is correct
39 Correct 1257 ms 44612 KB Output is correct
40 Correct 1322 ms 45276 KB Output is correct
41 Runtime error 206 ms 65540 KB Execution killed with signal 9 (could be triggered by violating memory limits)
42 Halted 0 ms 0 KB -