Submission #64564

# Submission time Handle Problem Language Result Execution time Memory
64564 2018-08-04T23:28:57 Z keko37 Snake Escaping (JOI18_snake_escaping) C++14
12 / 100
403 ms 66560 KB
#include<iostream>

using namespace std;

const int MAXN = 21;

int n, q;
char l[MAXN];
int val[1<<MAXN], sum0[1<<MAXN], sum1[1<<MAXN], pc[1<<MAXN];

void precompute () {
	for (int i=0; i<(1<<n); i++) {
		pc[i] = __builtin_popcount(i);
		sum0[i] = val[i];
		sum1[i] = val[i ^ ((1<<n) - 1)];
	}
	for (int i=0; i<n; i++) {
		for (int j=0; j<(1<<n); j++) {
			if (j & (1<<i)) sum0[j] += sum0[j ^ (1<<i)];
			if (j & (1<<i)) sum1[j] += sum1[j ^ (1<<i)];
		}
	}
}

inline bool ok (char c) {
	return (c>='0' && c<='9') || c=='?';
}

inline char readc () {
	char c;
	do {
		c = getchar();
	} while (!ok(c));
	return c;
}

int main () {
	cin >> n >> q;
	for (int i=0; i<(1<<n); i++) {
		val[i] = readc() - '0';
	}
	precompute();
	for (int tc=0; tc<q; tc++) {
		int a = 0, b = 0, c = 0;
		for (int i=0; i<n; i++) {
			l[i] = readc();
			if (l[i] == '?') {
				a ^= (1<<(n-1-i));
			} else if (l[i] == '0') {
				b ^= (1<<(n-1-i));
			} else {
				c ^= (1<<(n-1-i));
			}
		}
		int sol = 0, mask = 0, cnt = 0;
		if (pc[a] <= n/3) {
			do {
				cnt++;
				sol += val[mask | c];
			} while (mask = (mask-a) & a);
		} else if (pc[b] <= n/3) {
			do {
				cnt++;
				if (pc[mask | a] & 1) {
					sol -= sum1[mask | a];
				} else {
					sol += sum1[mask | a];
				}
			} while (mask = (mask-b) & b);
			if (sol < 0) sol = -sol;
		} else {
			do {
				cnt++;
				if (pc[mask | a] & 1) {
					sol -= sum0[mask | a];
				} else {
					sol += sum0[mask | a];
				}
			} while (mask = (mask-c) & c);
			if (sol < 0) sol = -sol;
		}
		printf("%d\n", sol);
	}
	return 0;
}

Compilation message

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:60:18: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
    } while (mask = (mask-a) & a);
             ~~~~~^~~~~~~~~~~~~~
snake_escaping.cpp:69:18: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
    } while (mask = (mask-b) & b);
             ~~~~~^~~~~~~~~~~~~~
snake_escaping.cpp:79:18: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
    } while (mask = (mask-c) & c);
             ~~~~~^~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 380 KB Output is correct
2 Correct 3 ms 380 KB Output is correct
3 Correct 2 ms 436 KB Output is correct
4 Correct 3 ms 488 KB Output is correct
5 Correct 3 ms 508 KB Output is correct
6 Correct 3 ms 592 KB Output is correct
7 Correct 2 ms 592 KB Output is correct
8 Correct 2 ms 720 KB Output is correct
9 Correct 3 ms 744 KB Output is correct
10 Correct 2 ms 744 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 380 KB Output is correct
2 Correct 3 ms 380 KB Output is correct
3 Correct 2 ms 436 KB Output is correct
4 Correct 3 ms 488 KB Output is correct
5 Correct 3 ms 508 KB Output is correct
6 Correct 3 ms 592 KB Output is correct
7 Correct 2 ms 592 KB Output is correct
8 Correct 2 ms 720 KB Output is correct
9 Correct 3 ms 744 KB Output is correct
10 Correct 2 ms 744 KB Output is correct
11 Correct 316 ms 4460 KB Output is correct
12 Correct 364 ms 4460 KB Output is correct
13 Correct 363 ms 4460 KB Output is correct
14 Correct 377 ms 4460 KB Output is correct
15 Correct 372 ms 4652 KB Output is correct
16 Correct 346 ms 14640 KB Output is correct
17 Correct 381 ms 25300 KB Output is correct
18 Correct 280 ms 37864 KB Output is correct
19 Correct 335 ms 45620 KB Output is correct
20 Correct 339 ms 57948 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 380 KB Output is correct
2 Correct 3 ms 380 KB Output is correct
3 Correct 2 ms 436 KB Output is correct
4 Correct 3 ms 488 KB Output is correct
5 Correct 3 ms 508 KB Output is correct
6 Correct 3 ms 592 KB Output is correct
7 Correct 2 ms 592 KB Output is correct
8 Correct 2 ms 720 KB Output is correct
9 Correct 3 ms 744 KB Output is correct
10 Correct 2 ms 744 KB Output is correct
11 Correct 316 ms 4460 KB Output is correct
12 Correct 364 ms 4460 KB Output is correct
13 Correct 363 ms 4460 KB Output is correct
14 Correct 377 ms 4460 KB Output is correct
15 Correct 372 ms 4652 KB Output is correct
16 Correct 346 ms 14640 KB Output is correct
17 Correct 381 ms 25300 KB Output is correct
18 Correct 280 ms 37864 KB Output is correct
19 Correct 335 ms 45620 KB Output is correct
20 Correct 339 ms 57948 KB Output is correct
21 Runtime error 403 ms 66560 KB Memory limit exceeded: We have a known bug that the memory usage is measured incorrectly (possibly because of Meltdown/Spectre patch), so your solution may be correct. Please submit again. Sorry for the inconvenience.
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 380 KB Output is correct
2 Correct 3 ms 380 KB Output is correct
3 Correct 2 ms 436 KB Output is correct
4 Correct 3 ms 488 KB Output is correct
5 Correct 3 ms 508 KB Output is correct
6 Correct 3 ms 592 KB Output is correct
7 Correct 2 ms 592 KB Output is correct
8 Correct 2 ms 720 KB Output is correct
9 Correct 3 ms 744 KB Output is correct
10 Correct 2 ms 744 KB Output is correct
11 Runtime error 128 ms 66560 KB Memory limit exceeded: We have a known bug that the memory usage is measured incorrectly (possibly because of Meltdown/Spectre patch), so your solution may be correct. Please submit again. Sorry for the inconvenience.
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 380 KB Output is correct
2 Correct 3 ms 380 KB Output is correct
3 Correct 2 ms 436 KB Output is correct
4 Correct 3 ms 488 KB Output is correct
5 Correct 3 ms 508 KB Output is correct
6 Correct 3 ms 592 KB Output is correct
7 Correct 2 ms 592 KB Output is correct
8 Correct 2 ms 720 KB Output is correct
9 Correct 3 ms 744 KB Output is correct
10 Correct 2 ms 744 KB Output is correct
11 Correct 316 ms 4460 KB Output is correct
12 Correct 364 ms 4460 KB Output is correct
13 Correct 363 ms 4460 KB Output is correct
14 Correct 377 ms 4460 KB Output is correct
15 Correct 372 ms 4652 KB Output is correct
16 Correct 346 ms 14640 KB Output is correct
17 Correct 381 ms 25300 KB Output is correct
18 Correct 280 ms 37864 KB Output is correct
19 Correct 335 ms 45620 KB Output is correct
20 Correct 339 ms 57948 KB Output is correct
21 Runtime error 403 ms 66560 KB Memory limit exceeded: We have a known bug that the memory usage is measured incorrectly (possibly because of Meltdown/Spectre patch), so your solution may be correct. Please submit again. Sorry for the inconvenience.
22 Halted 0 ms 0 KB -