結果
| 問題 |
No.2813 Cookie
|
| コンテスト | |
| ユーザー |
Pres1dent
|
| 提出日時 | 2024-07-29 16:11:00 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,987 bytes |
| コンパイル時間 | 2,283 ms |
| コンパイル使用メモリ | 206,920 KB |
| 最終ジャッジ日時 | 2025-02-23 19:25:37 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 5 WA * 25 |
コンパイルメッセージ
main.cpp: In function ‘std::vector<int> experiment()’:
main.cpp:41:21: warning: range-based ‘for’ loops with initializer only available with ‘-std=c++20’ or ‘-std=gnu++20’ [-Wc++20-extensions]
41 | for (int j = 0; auto x : st) {
| ^~~~
ソースコード
#include <bits/stdc++.h>
using namespace std;
const int INF = 1001001001;
vector<int> experiment() {
int M = 40;
vector<int> g(M);
for (int i = 1; i < M; i++) {
vector<vector<int>> cand;
for (int s = 2; s <= i; s++) {
// cerr << i << " " << s << endl;
vector<int> tmp;
auto dfs = [&](auto&& self, int d, int ps, int rs) -> void {
if (d == s) {
if (rs == 0) {
cand.push_back(tmp);
}
return;
}
for (int i = 1; i <= ps; i++) {
tmp.push_back(i);
if (s - d - 1 <= rs - i) {
self(self, d + 1, i, rs - i);
}
tmp.pop_back();
}
};
dfs(dfs, 0, i, i);
}
set<int> st;
for (int j = 0; j < i; j++) {
st.insert(j);
}
st.insert(INF);
for (auto v : cand) {
int sg = 0;
for (auto e : v) {
sg ^= g[e];
}
st.insert(sg);
}
for (int j = 0; auto x : st) {
if (j != x) {
g[i] = j;
break;
}
j++;
}
// if (i - 1 >= 0 and g[i - 1] != g[i]) cerr << endl;
}
return g;
}
int main() {
auto naive = experiment();
vector<int> v1 = { 0, 1, 2, 4, 4, 7, 8, 8, 11, 13, 14 };
vector<int> v2 = { 0, 0, 3, 5, 6, 8, 10, 12, 14 };
assert(v1.size() == 11);
assert(v2.size() == 9);
auto g = [&](int x) -> int {
if (x <= 10) return v1[x];
x -= 11;
return (x / 9 + 1) * 16 + v2[x % 9];
};
vector<int> fast;
for (int i = 0; i < 40; i++) {
fast.emplace_back(g(i));
}
// for (int i = 0; i < 40; i++) {
// cerr << naive[i] << " ";
// }
// cerr << endl;
// for (int i = 0; i < 40; i++) {
// cerr << fast[i] << " ";
// }
// cerr << endl;
assert(naive == fast);
int t; cin >> t;
while (t--) {
int sg = 0;
int n; cin >> n;
for (int i = 0; i < n; i++) {
int a; cin >> a;
sg ^= g(a);
}
if (sg == 0) cout << "Bob" << endl;
else cout << "Alice" << endl;
}
}
Pres1dent