답안 #886843

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
886843 2023-12-13T03:51:24 Z socho Snake Escaping (JOI18_snake_escaping) C++14
22 / 100
854 ms 65536 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef double D;
typedef vector<int> VI;
typedef set<int> SI;
typedef map<int, int> MII;
typedef pair<int, int> PII;

#define A first
#define B second
#define SZ(x) int(x.size())
#define PB push_back
#define FR(i, a, b) for (int i = (a); i < (b); i++)
#define FOR(i, n) FR(i, 0, n)
#define RF(i, a, b) for (int i = (a); i >= (b); i--)
#define FRA(a, x) for (auto a: (x))

template <typename T> inline void set_min(T &a, T b) {if(b < a) a = b;}
template <typename T> inline void set_max(T &a, T b) {if(b > a) a = b;}

int n, q;
string s;
const int MXN = 22;
int dp[MXN][1<<MXN];
int dp2[MXN][1<<MXN];
int val[1<<MXN];

signed main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	
	cin >> n >> q;
	cin >> s;
	
	FOR(i, 1<<n) {
		val[i] = (s[i] - '0');
	}
	
	FOR(b, n) {
		FOR(i, 1<<n) {
			if (b == 0) {
				dp[b][i] = ((i & (1 << b)) > 0 ? val[i] + val[i ^ (1<<b)] : val[i]);
				dp2[b][i] = ((i & (1 << b)) == 0 ? val[i] + val[i ^ (1<<b)] : val[i]);
			}
			else {
				dp[b][i] = ((i & (1 << b)) > 0 ? dp[b-1][i] + dp[b-1][i ^ (1<<b)] : dp[b-1][i]);
				dp2[b][i] = ((i & (1 << b)) == 0 ? dp2[b-1][i] + dp2[b-1][i ^ (1<<b)] : dp2[b-1][i]);
			}
		}
	}
	
	FOR(_, q) {
		string s;
		cin >> s;
		reverse(s.begin(), s.end());
		
		int n0 = 0, n1 = 0, nq = 0;
		FRA(x, s) {
			if (x == '?') nq++;
			else if (x == '0') n0++;
			else n1++;
		}
		
		int ans = 0;
		if (nq <= 6) {
			// just add over the bitmasks
			int main = 0;
			VI ms;
			FOR(i, n) {
				if (s[i] == '?') ms.PB(i);
				else if (s[i] == '1') main += (1 << i);
			}
			FOR(i, 1<<nq) {
				int p = main;
				FOR(j, nq) {
					if (i & (1 << j)) p += (1 << ms[j]);
				}
				ans += val[p];
			}
		}
		else if (n0 <= 6) {
			// 0011??
			// super(001100)
			// -super(011100)
			// -super(101100)
			// +super(111100)
			VI ms;
			int main = 0;
			FOR(i, n) {
				if (s[i] == '0') ms.PB(i);
				else if (s[i] == '1') main += (1 << i);
			}
			FOR(i, 1<<n0) {
				int p = main;
				FOR(j, n0) {
					if (i & (1 << j)) {
						p += (1 << ms[j]);
					}
				}
				if (__builtin_popcount(i) % 2 == 0) ans += dp2[n-1][p];
				else ans -= dp2[n-1][p];
			}
		}
		else { // n1 <= 6
			// 0011??
			// sub(001111)
			// -sub(001011)
			// -sub(000111)
			// +sub(000011)
			VI ms;
			int main = 0;
			FOR(i, n) {
				if (s[i] == '1') ms.PB(i);
				else if (s[i] == '?') main += (1 << i);
			}
			FOR(i, 1<<n1) {
				int p = main;
				FOR(j, n1) {
					if (i & (1 << j)) p += (1 << ms[j]);
				}
				if ((n1 - __builtin_popcount(i)) % 2 == 0) ans += dp[n-1][p];
				else ans -= dp[n-1][p];
			}
		}
		cout << ans << '\n';
		
	}
	
}
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 41304 KB Output is correct
2 Correct 5 ms 41308 KB Output is correct
3 Correct 5 ms 41352 KB Output is correct
4 Correct 5 ms 41308 KB Output is correct
5 Correct 5 ms 41456 KB Output is correct
6 Correct 5 ms 41308 KB Output is correct
7 Correct 6 ms 41420 KB Output is correct
8 Correct 5 ms 41308 KB Output is correct
9 Correct 4 ms 41308 KB Output is correct
10 Correct 5 ms 41308 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 41304 KB Output is correct
2 Correct 5 ms 41308 KB Output is correct
3 Correct 5 ms 41352 KB Output is correct
4 Correct 5 ms 41308 KB Output is correct
5 Correct 5 ms 41456 KB Output is correct
6 Correct 5 ms 41308 KB Output is correct
7 Correct 6 ms 41420 KB Output is correct
8 Correct 5 ms 41308 KB Output is correct
9 Correct 4 ms 41308 KB Output is correct
10 Correct 5 ms 41308 KB Output is correct
11 Correct 478 ms 51052 KB Output is correct
12 Correct 501 ms 50772 KB Output is correct
13 Correct 338 ms 50004 KB Output is correct
14 Correct 349 ms 50244 KB Output is correct
15 Correct 789 ms 51028 KB Output is correct
16 Correct 433 ms 50260 KB Output is correct
17 Correct 421 ms 50260 KB Output is correct
18 Correct 160 ms 52048 KB Output is correct
19 Correct 174 ms 48892 KB Output is correct
20 Correct 472 ms 50672 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 41304 KB Output is correct
2 Correct 5 ms 41308 KB Output is correct
3 Correct 5 ms 41352 KB Output is correct
4 Correct 5 ms 41308 KB Output is correct
5 Correct 5 ms 41456 KB Output is correct
6 Correct 5 ms 41308 KB Output is correct
7 Correct 6 ms 41420 KB Output is correct
8 Correct 5 ms 41308 KB Output is correct
9 Correct 4 ms 41308 KB Output is correct
10 Correct 5 ms 41308 KB Output is correct
11 Correct 478 ms 51052 KB Output is correct
12 Correct 501 ms 50772 KB Output is correct
13 Correct 338 ms 50004 KB Output is correct
14 Correct 349 ms 50244 KB Output is correct
15 Correct 789 ms 51028 KB Output is correct
16 Correct 433 ms 50260 KB Output is correct
17 Correct 421 ms 50260 KB Output is correct
18 Correct 160 ms 52048 KB Output is correct
19 Correct 174 ms 48892 KB Output is correct
20 Correct 472 ms 50672 KB Output is correct
21 Correct 218 ms 65536 KB Output is correct
22 Correct 770 ms 65536 KB Output is correct
23 Correct 468 ms 65536 KB Output is correct
24 Correct 457 ms 65536 KB Output is correct
25 Correct 403 ms 65536 KB Output is correct
26 Correct 559 ms 65536 KB Output is correct
27 Correct 537 ms 65536 KB Output is correct
28 Correct 179 ms 65536 KB Output is correct
29 Correct 204 ms 64592 KB Output is correct
30 Correct 449 ms 65536 KB Output is correct
31 Correct 854 ms 63620 KB Output is correct
32 Correct 580 ms 63828 KB Output is correct
33 Correct 352 ms 61460 KB Output is correct
34 Correct 432 ms 61932 KB Output is correct
35 Correct 534 ms 63116 KB Output is correct
36 Correct 150 ms 59608 KB Output is correct
37 Correct 826 ms 63704 KB Output is correct
38 Correct 216 ms 59828 KB Output is correct
39 Correct 456 ms 62072 KB Output is correct
40 Correct 429 ms 61520 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 41304 KB Output is correct
2 Correct 5 ms 41308 KB Output is correct
3 Correct 5 ms 41352 KB Output is correct
4 Correct 5 ms 41308 KB Output is correct
5 Correct 5 ms 41456 KB Output is correct
6 Correct 5 ms 41308 KB Output is correct
7 Correct 6 ms 41420 KB Output is correct
8 Correct 5 ms 41308 KB Output is correct
9 Correct 4 ms 41308 KB Output is correct
10 Correct 5 ms 41308 KB Output is correct
11 Runtime error 23 ms 65536 KB Execution killed with signal 9
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 41304 KB Output is correct
2 Correct 5 ms 41308 KB Output is correct
3 Correct 5 ms 41352 KB Output is correct
4 Correct 5 ms 41308 KB Output is correct
5 Correct 5 ms 41456 KB Output is correct
6 Correct 5 ms 41308 KB Output is correct
7 Correct 6 ms 41420 KB Output is correct
8 Correct 5 ms 41308 KB Output is correct
9 Correct 4 ms 41308 KB Output is correct
10 Correct 5 ms 41308 KB Output is correct
11 Correct 478 ms 51052 KB Output is correct
12 Correct 501 ms 50772 KB Output is correct
13 Correct 338 ms 50004 KB Output is correct
14 Correct 349 ms 50244 KB Output is correct
15 Correct 789 ms 51028 KB Output is correct
16 Correct 433 ms 50260 KB Output is correct
17 Correct 421 ms 50260 KB Output is correct
18 Correct 160 ms 52048 KB Output is correct
19 Correct 174 ms 48892 KB Output is correct
20 Correct 472 ms 50672 KB Output is correct
21 Correct 218 ms 65536 KB Output is correct
22 Correct 770 ms 65536 KB Output is correct
23 Correct 468 ms 65536 KB Output is correct
24 Correct 457 ms 65536 KB Output is correct
25 Correct 403 ms 65536 KB Output is correct
26 Correct 559 ms 65536 KB Output is correct
27 Correct 537 ms 65536 KB Output is correct
28 Correct 179 ms 65536 KB Output is correct
29 Correct 204 ms 64592 KB Output is correct
30 Correct 449 ms 65536 KB Output is correct
31 Correct 854 ms 63620 KB Output is correct
32 Correct 580 ms 63828 KB Output is correct
33 Correct 352 ms 61460 KB Output is correct
34 Correct 432 ms 61932 KB Output is correct
35 Correct 534 ms 63116 KB Output is correct
36 Correct 150 ms 59608 KB Output is correct
37 Correct 826 ms 63704 KB Output is correct
38 Correct 216 ms 59828 KB Output is correct
39 Correct 456 ms 62072 KB Output is correct
40 Correct 429 ms 61520 KB Output is correct
41 Runtime error 23 ms 65536 KB Execution killed with signal 9
42 Halted 0 ms 0 KB -