Submission #315413

# Submission time Handle Problem Language Result Execution time Memory
315413 2020-10-22T21:14:39 Z aZvezda Snake Escaping (JOI18_snake_escaping) C++14
12 / 100
2000 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;
const ll MAX_RIGHT = 4800000; ll MAX_LEFT = 6;
ll pow3[50];
int dp[MAX_RIGHT];
int price[MAX_N];
string queries[MAX_N];
int ans[MAX_N];
int n, q;
int sum[MAX_RIGHT], first2[MAX_RIGHT];

void prec() {
	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) {
			int 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) {
		ll currMask = 0;
		for(ll j = n - 1; j >= MAX_LEFT; j --) {
			currMask *= 3;
			currMask += (ll)(queries[it][j] - '0');
		}
		ans[it] += dp[currMask];
	}
}

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 24 ms 33152 KB Output is correct
4 Correct 24 ms 33152 KB Output is correct
5 Correct 24 ms 33152 KB Output is correct
6 Correct 23 ms 33152 KB Output is correct
7 Correct 23 ms 33152 KB Output is correct
8 Correct 24 ms 33280 KB Output is correct
9 Correct 23 ms 33152 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 24 ms 33152 KB Output is correct
4 Correct 24 ms 33152 KB Output is correct
5 Correct 24 ms 33152 KB Output is correct
6 Correct 23 ms 33152 KB Output is correct
7 Correct 23 ms 33152 KB Output is correct
8 Correct 24 ms 33280 KB Output is correct
9 Correct 23 ms 33152 KB Output is correct
10 Correct 23 ms 33280 KB Output is correct
11 Correct 1386 ms 49680 KB Output is correct
12 Correct 1469 ms 59700 KB Output is correct
13 Correct 1330 ms 52956 KB Output is correct
14 Correct 1476 ms 51948 KB Output is correct
15 Correct 1645 ms 52208 KB Output is correct
16 Correct 1605 ms 52144 KB Output is correct
17 Correct 1596 ms 51444 KB Output is correct
18 Correct 1979 ms 64280 KB Output is correct
19 Correct 1164 ms 50152 KB Output is correct
20 Correct 1515 ms 60392 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 24 ms 33152 KB Output is correct
4 Correct 24 ms 33152 KB Output is correct
5 Correct 24 ms 33152 KB Output is correct
6 Correct 23 ms 33152 KB Output is correct
7 Correct 23 ms 33152 KB Output is correct
8 Correct 24 ms 33280 KB Output is correct
9 Correct 23 ms 33152 KB Output is correct
10 Correct 23 ms 33280 KB Output is correct
11 Correct 1386 ms 49680 KB Output is correct
12 Correct 1469 ms 59700 KB Output is correct
13 Correct 1330 ms 52956 KB Output is correct
14 Correct 1476 ms 51948 KB Output is correct
15 Correct 1645 ms 52208 KB Output is correct
16 Correct 1605 ms 52144 KB Output is correct
17 Correct 1596 ms 51444 KB Output is correct
18 Correct 1979 ms 64280 KB Output is correct
19 Correct 1164 ms 50152 KB Output is correct
20 Correct 1515 ms 60392 KB Output is correct
21 Correct 1571 ms 65536 KB Output is correct
22 Correct 1537 ms 63188 KB Output is correct
23 Correct 1457 ms 56088 KB Output is correct
24 Correct 1551 ms 55324 KB Output is correct
25 Correct 1680 ms 56360 KB Output is correct
26 Correct 1650 ms 55780 KB Output is correct
27 Correct 1647 ms 54696 KB Output is correct
28 Execution timed out 2072 ms 65536 KB Time limit exceeded
29 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 24 ms 33152 KB Output is correct
4 Correct 24 ms 33152 KB Output is correct
5 Correct 24 ms 33152 KB Output is correct
6 Correct 23 ms 33152 KB Output is correct
7 Correct 23 ms 33152 KB Output is correct
8 Correct 24 ms 33280 KB Output is correct
9 Correct 23 ms 33152 KB Output is correct
10 Correct 23 ms 33280 KB Output is correct
11 Runtime error 145 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 24 ms 33152 KB Output is correct
4 Correct 24 ms 33152 KB Output is correct
5 Correct 24 ms 33152 KB Output is correct
6 Correct 23 ms 33152 KB Output is correct
7 Correct 23 ms 33152 KB Output is correct
8 Correct 24 ms 33280 KB Output is correct
9 Correct 23 ms 33152 KB Output is correct
10 Correct 23 ms 33280 KB Output is correct
11 Correct 1386 ms 49680 KB Output is correct
12 Correct 1469 ms 59700 KB Output is correct
13 Correct 1330 ms 52956 KB Output is correct
14 Correct 1476 ms 51948 KB Output is correct
15 Correct 1645 ms 52208 KB Output is correct
16 Correct 1605 ms 52144 KB Output is correct
17 Correct 1596 ms 51444 KB Output is correct
18 Correct 1979 ms 64280 KB Output is correct
19 Correct 1164 ms 50152 KB Output is correct
20 Correct 1515 ms 60392 KB Output is correct
21 Correct 1571 ms 65536 KB Output is correct
22 Correct 1537 ms 63188 KB Output is correct
23 Correct 1457 ms 56088 KB Output is correct
24 Correct 1551 ms 55324 KB Output is correct
25 Correct 1680 ms 56360 KB Output is correct
26 Correct 1650 ms 55780 KB Output is correct
27 Correct 1647 ms 54696 KB Output is correct
28 Execution timed out 2072 ms 65536 KB Time limit exceeded
29 Halted 0 ms 0 KB -