結果
問題 | No.1149 色塗りゲーム |
ユーザー | tkmst201 |
提出日時 | 2021-01-20 15:55:45 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 132 ms / 2,000 ms |
コード長 | 2,052 bytes |
コンパイル時間 | 2,397 ms |
コンパイル使用メモリ | 213,496 KB |
実行使用メモリ | 25,220 KB |
平均クエリ数 | 18.86 |
最終ジャッジ日時 | 2024-07-17 10:26:41 |
合計ジャッジ時間 | 9,194 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 56 ms
25,220 KB |
testcase_01 | AC | 52 ms
24,836 KB |
testcase_02 | AC | 52 ms
24,836 KB |
testcase_03 | AC | 53 ms
24,580 KB |
testcase_04 | AC | 53 ms
24,964 KB |
testcase_05 | AC | 53 ms
24,580 KB |
testcase_06 | AC | 53 ms
24,580 KB |
testcase_07 | AC | 53 ms
25,220 KB |
testcase_08 | AC | 53 ms
24,964 KB |
testcase_09 | AC | 53 ms
24,964 KB |
testcase_10 | AC | 55 ms
25,220 KB |
testcase_11 | AC | 55 ms
25,220 KB |
testcase_12 | AC | 54 ms
25,220 KB |
testcase_13 | AC | 55 ms
25,220 KB |
testcase_14 | AC | 56 ms
24,964 KB |
testcase_15 | AC | 55 ms
24,836 KB |
testcase_16 | AC | 55 ms
25,220 KB |
testcase_17 | AC | 57 ms
24,836 KB |
testcase_18 | AC | 57 ms
25,208 KB |
testcase_19 | AC | 57 ms
25,220 KB |
testcase_20 | AC | 57 ms
24,580 KB |
testcase_21 | AC | 58 ms
24,568 KB |
testcase_22 | AC | 57 ms
25,220 KB |
testcase_23 | AC | 57 ms
24,836 KB |
testcase_24 | AC | 58 ms
24,964 KB |
testcase_25 | AC | 58 ms
24,580 KB |
testcase_26 | AC | 57 ms
25,220 KB |
testcase_27 | AC | 58 ms
24,964 KB |
testcase_28 | AC | 58 ms
25,220 KB |
testcase_29 | AC | 62 ms
24,580 KB |
testcase_30 | AC | 103 ms
24,836 KB |
testcase_31 | AC | 96 ms
25,220 KB |
testcase_32 | AC | 103 ms
24,836 KB |
testcase_33 | AC | 106 ms
24,580 KB |
testcase_34 | AC | 106 ms
24,964 KB |
testcase_35 | AC | 103 ms
25,220 KB |
testcase_36 | AC | 114 ms
25,208 KB |
testcase_37 | AC | 114 ms
24,964 KB |
testcase_38 | AC | 112 ms
24,964 KB |
testcase_39 | AC | 114 ms
24,580 KB |
testcase_40 | AC | 114 ms
24,836 KB |
testcase_41 | AC | 114 ms
24,836 KB |
testcase_42 | AC | 121 ms
24,836 KB |
testcase_43 | AC | 123 ms
25,220 KB |
testcase_44 | AC | 122 ms
24,580 KB |
testcase_45 | AC | 122 ms
24,836 KB |
testcase_46 | AC | 126 ms
24,836 KB |
testcase_47 | AC | 127 ms
24,832 KB |
testcase_48 | AC | 132 ms
24,836 KB |
testcase_49 | AC | 132 ms
24,964 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define REP(i,n) FOR(i,0,n) #define ALL(v) begin(v),end(v) template<typename A, typename B> inline bool chmax(A & a, const B & b) { if (a < b) { a = b; return true; } return false; } template<typename A, typename B> inline bool chmin(A & a, const B & b) { if (a > b) { a = b; return true; } return false; } using ll = long long; using pii = pair<int, int>; constexpr ll INF = 1ll<<30; constexpr ll longINF = 1ll<<60; constexpr ll MOD = 1000000007; constexpr bool debug = false; //---------------------------------// int main() { int N; cin >> N; vector<int> grundy(N + 1); grundy[0] = 0; vector<bool> done; FOR(i, 1, N + 1) { done.assign(N + 1, false); REP(j, i) { done[grundy[j] ^ grundy[i - 1 - j]] = true; if (j + 1 < i) done[grundy[j] ^ grundy[i - 2 - j]] = true; } REP(j, i + 1) if (!done[j]) { grundy[i] = j; break; } } auto query = [](vector<bool> & board, int k, int x) -> pii { board[x] = true; if (k == 2) board[x + 1] = true; cout << k << " " << x + 1 << endl; int t; cin >> t; if (t <= 1) return {-1, 0}; cin >> k >> x; --x; if (t == 2) return {-1, 0}; board[x] = true; if (k == 2) board[x + 1] = true; return {k, x}; }; vector<bool> board(N); while (true) { vector<pii> cnt; // cnt, pos for (int i = 0, r = 0; i < N; i = r) { while (r < N && !board[r]) ++r; if (i == r) ++r; else cnt.emplace_back(r - i, i); } int g = 0; for (auto [c, _] : cnt) g ^= grundy[c]; assert(g > 0); int mxbit = -1; for (int i = 6; i >= 0; --i) if (g >> i & 1) { mxbit = i; break; } pii cur {-1, 0}; for (auto [c, p] : cnt) { if (~grundy[c] >> mxbit & 1) continue; int nex = grundy[c] ^ g; REP(i, c) { if ((grundy[i] ^ grundy[c - 1 - i]) == nex) { cur = {1, p + i}; break; } if (i + 1 < c && (grundy[i] ^ grundy[c - 2 - i]) == nex) { cur = {2, p + i}; break; } } break; } auto res = query(board, cur.first, cur.second); if (res.first == -1) break; } }