답안 #64565

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
64565 2018-08-04T23:30:03 Z keko37 Snake Escaping (JOI18_snake_escaping) C++14
12 / 100
516 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);
             ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 376 KB Output is correct
2 Correct 4 ms 556 KB Output is correct
3 Correct 4 ms 556 KB Output is correct
4 Correct 4 ms 584 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 604 KB Output is correct
7 Correct 3 ms 604 KB Output is correct
8 Correct 3 ms 604 KB Output is correct
9 Correct 3 ms 604 KB Output is correct
10 Correct 4 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 376 KB Output is correct
2 Correct 4 ms 556 KB Output is correct
3 Correct 4 ms 556 KB Output is correct
4 Correct 4 ms 584 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 604 KB Output is correct
7 Correct 3 ms 604 KB Output is correct
8 Correct 3 ms 604 KB Output is correct
9 Correct 3 ms 604 KB Output is correct
10 Correct 4 ms 604 KB Output is correct
11 Correct 422 ms 4700 KB Output is correct
12 Correct 447 ms 14624 KB Output is correct
13 Correct 408 ms 14624 KB Output is correct
14 Correct 436 ms 14624 KB Output is correct
15 Correct 373 ms 14928 KB Output is correct
16 Correct 396 ms 24888 KB Output is correct
17 Correct 516 ms 32680 KB Output is correct
18 Correct 446 ms 34420 KB Output is correct
19 Correct 327 ms 34420 KB Output is correct
20 Correct 437 ms 34420 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 376 KB Output is correct
2 Correct 4 ms 556 KB Output is correct
3 Correct 4 ms 556 KB Output is correct
4 Correct 4 ms 584 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 604 KB Output is correct
7 Correct 3 ms 604 KB Output is correct
8 Correct 3 ms 604 KB Output is correct
9 Correct 3 ms 604 KB Output is correct
10 Correct 4 ms 604 KB Output is correct
11 Correct 422 ms 4700 KB Output is correct
12 Correct 447 ms 14624 KB Output is correct
13 Correct 408 ms 14624 KB Output is correct
14 Correct 436 ms 14624 KB Output is correct
15 Correct 373 ms 14928 KB Output is correct
16 Correct 396 ms 24888 KB Output is correct
17 Correct 516 ms 32680 KB Output is correct
18 Correct 446 ms 34420 KB Output is correct
19 Correct 327 ms 34420 KB Output is correct
20 Correct 437 ms 34420 KB Output is correct
21 Correct 407 ms 34420 KB Output is correct
22 Correct 414 ms 47564 KB Output is correct
23 Correct 448 ms 60300 KB Output is correct
24 Runtime error 474 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.
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 376 KB Output is correct
2 Correct 4 ms 556 KB Output is correct
3 Correct 4 ms 556 KB Output is correct
4 Correct 4 ms 584 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 604 KB Output is correct
7 Correct 3 ms 604 KB Output is correct
8 Correct 3 ms 604 KB Output is correct
9 Correct 3 ms 604 KB Output is correct
10 Correct 4 ms 604 KB Output is correct
11 Runtime error 120 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 4 ms 376 KB Output is correct
2 Correct 4 ms 556 KB Output is correct
3 Correct 4 ms 556 KB Output is correct
4 Correct 4 ms 584 KB Output is correct
5 Correct 4 ms 584 KB Output is correct
6 Correct 3 ms 604 KB Output is correct
7 Correct 3 ms 604 KB Output is correct
8 Correct 3 ms 604 KB Output is correct
9 Correct 3 ms 604 KB Output is correct
10 Correct 4 ms 604 KB Output is correct
11 Correct 422 ms 4700 KB Output is correct
12 Correct 447 ms 14624 KB Output is correct
13 Correct 408 ms 14624 KB Output is correct
14 Correct 436 ms 14624 KB Output is correct
15 Correct 373 ms 14928 KB Output is correct
16 Correct 396 ms 24888 KB Output is correct
17 Correct 516 ms 32680 KB Output is correct
18 Correct 446 ms 34420 KB Output is correct
19 Correct 327 ms 34420 KB Output is correct
20 Correct 437 ms 34420 KB Output is correct
21 Correct 407 ms 34420 KB Output is correct
22 Correct 414 ms 47564 KB Output is correct
23 Correct 448 ms 60300 KB Output is correct
24 Runtime error 474 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.
25 Halted 0 ms 0 KB -