답안 #64566

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
64566 2018-08-04T23:33:23 Z keko37 Snake Escaping (JOI18_snake_escaping) C++14
12 / 100
513 ms 66560 KB
#include<iostream>

using namespace std;

const int MAXN = 21;

int n, q, a, b, c;
char l[MAXN], cc;
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 r) {
	return (r>='0' && r<='9') || r=='?';
}

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

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++) {
		a = b = 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;
		if (pc[a] <= n/3) {
			do {
				sol += val[mask | c];
			} while (mask = (mask-a) & a);
		} else if (pc[b] <= n/3) {
			do {
				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 {
				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:58:18: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
    } while (mask = (mask-a) & a);
             ~~~~~^~~~~~~~~~~~~~
snake_escaping.cpp:66:18: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
    } while (mask = (mask-b) & b);
             ~~~~~^~~~~~~~~~~~~~
snake_escaping.cpp:75:18: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
    } while (mask = (mask-c) & c);
             ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 4 ms 500 KB Output is correct
3 Correct 4 ms 500 KB Output is correct
4 Correct 3 ms 516 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 596 KB Output is correct
7 Correct 3 ms 652 KB Output is correct
8 Correct 3 ms 664 KB Output is correct
9 Correct 3 ms 664 KB Output is correct
10 Correct 3 ms 792 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 4 ms 500 KB Output is correct
3 Correct 4 ms 500 KB Output is correct
4 Correct 3 ms 516 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 596 KB Output is correct
7 Correct 3 ms 652 KB Output is correct
8 Correct 3 ms 664 KB Output is correct
9 Correct 3 ms 664 KB Output is correct
10 Correct 3 ms 792 KB Output is correct
11 Correct 370 ms 4764 KB Output is correct
12 Correct 380 ms 15080 KB Output is correct
13 Correct 359 ms 15080 KB Output is correct
14 Correct 393 ms 15080 KB Output is correct
15 Correct 370 ms 15432 KB Output is correct
16 Correct 409 ms 25088 KB Output is correct
17 Correct 386 ms 25144 KB Output is correct
18 Correct 303 ms 27136 KB Output is correct
19 Correct 424 ms 27136 KB Output is correct
20 Correct 413 ms 27136 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 4 ms 500 KB Output is correct
3 Correct 4 ms 500 KB Output is correct
4 Correct 3 ms 516 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 596 KB Output is correct
7 Correct 3 ms 652 KB Output is correct
8 Correct 3 ms 664 KB Output is correct
9 Correct 3 ms 664 KB Output is correct
10 Correct 3 ms 792 KB Output is correct
11 Correct 370 ms 4764 KB Output is correct
12 Correct 380 ms 15080 KB Output is correct
13 Correct 359 ms 15080 KB Output is correct
14 Correct 393 ms 15080 KB Output is correct
15 Correct 370 ms 15432 KB Output is correct
16 Correct 409 ms 25088 KB Output is correct
17 Correct 386 ms 25144 KB Output is correct
18 Correct 303 ms 27136 KB Output is correct
19 Correct 424 ms 27136 KB Output is correct
20 Correct 413 ms 27136 KB Output is correct
21 Correct 369 ms 27136 KB Output is correct
22 Correct 423 ms 27136 KB Output is correct
23 Correct 443 ms 27136 KB Output is correct
24 Correct 434 ms 27136 KB Output is correct
25 Correct 450 ms 40516 KB Output is correct
26 Correct 455 ms 40516 KB Output is correct
27 Correct 440 ms 40516 KB Output is correct
28 Correct 314 ms 40516 KB Output is correct
29 Correct 349 ms 40516 KB Output is correct
30 Correct 406 ms 51864 KB Output is correct
31 Correct 511 ms 65324 KB Output is correct
32 Runtime error 513 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.
33 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 4 ms 500 KB Output is correct
3 Correct 4 ms 500 KB Output is correct
4 Correct 3 ms 516 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 596 KB Output is correct
7 Correct 3 ms 652 KB Output is correct
8 Correct 3 ms 664 KB Output is correct
9 Correct 3 ms 664 KB Output is correct
10 Correct 3 ms 792 KB Output is correct
11 Runtime error 113 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 -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 4 ms 500 KB Output is correct
3 Correct 4 ms 500 KB Output is correct
4 Correct 3 ms 516 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 596 KB Output is correct
7 Correct 3 ms 652 KB Output is correct
8 Correct 3 ms 664 KB Output is correct
9 Correct 3 ms 664 KB Output is correct
10 Correct 3 ms 792 KB Output is correct
11 Correct 370 ms 4764 KB Output is correct
12 Correct 380 ms 15080 KB Output is correct
13 Correct 359 ms 15080 KB Output is correct
14 Correct 393 ms 15080 KB Output is correct
15 Correct 370 ms 15432 KB Output is correct
16 Correct 409 ms 25088 KB Output is correct
17 Correct 386 ms 25144 KB Output is correct
18 Correct 303 ms 27136 KB Output is correct
19 Correct 424 ms 27136 KB Output is correct
20 Correct 413 ms 27136 KB Output is correct
21 Correct 369 ms 27136 KB Output is correct
22 Correct 423 ms 27136 KB Output is correct
23 Correct 443 ms 27136 KB Output is correct
24 Correct 434 ms 27136 KB Output is correct
25 Correct 450 ms 40516 KB Output is correct
26 Correct 455 ms 40516 KB Output is correct
27 Correct 440 ms 40516 KB Output is correct
28 Correct 314 ms 40516 KB Output is correct
29 Correct 349 ms 40516 KB Output is correct
30 Correct 406 ms 51864 KB Output is correct
31 Correct 511 ms 65324 KB Output is correct
32 Runtime error 513 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.
33 Halted 0 ms 0 KB -