結果
問題 |
No.3120 Lower Nim
|
ユーザー |
|
提出日時 | 2025-04-20 14:03:19 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,892 bytes |
コンパイル時間 | 2,941 ms |
コンパイル使用メモリ | 224,744 KB |
実行使用メモリ | 25,972 KB |
平均クエリ数 | 2414.70 |
最終ジャッジ日時 | 2025-04-20 14:03:31 |
合計ジャッジ時間 | 11,500 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 40 WA * 3 |
ソースコード
#pragma GCC optimize("Ofast,unroll-loops") #include <bits/stdc++.h> using namespace std; //#include<atcoder/all> //using namespace atcoder; using ll = long long int; using ull = unsigned long long int; using ld = long double; constexpr ll MAX = 2000000000000000000; constexpr ld PI = 3.14159265358979; constexpr ll MOD = 0;//2024948111; ld dotorad(ld K){ return PI * K / 180.0; } ld radtodo(ld K){ return K * 180.0 / PI; } mt19937 mt; void randinit(){ srand((unsigned)time(NULL));mt = mt19937(rand()); } int main(){ ll N; cin >> N; vector<ll> A(N); for(ll i = 0; i < N; i++){ cin >> A[i]; } ll s = 0,s2 = 0; for(ll i = 0;i < N;i++){ s ^= A[i]; s2 += A[i]; } ll p = 0; ll K = MAX; if(s2 % 2 == 1){ cout << "First" << endl; s = -1; K = 1; } else if(s == 0){ cout << "Second" << endl; p = 1; } else{ cout << "First" << endl; } set<tuple<ll,ll>> st; for(ll i = 0;i < N;i++){ st.emplace(A[i],i); } while(1){ if(p == 1){ ll i,p; cin >> i >> p; i--; auto it = st.find(make_tuple(A[i],i)); st.erase(it); if(s != -1) s ^= A[i]; A[i] -= p; if(s != -1) s ^= A[i]; st.emplace(A[i],i); K = p; s2 -= p; if(s2 % 2 == 1) s = -1; } else{ ll id = -1,x = MAX; auto p = st.rbegin(); if(s != -1) { while(p != st.rend()){ auto [a,i] = *p; ll disired_nokori = (A[i] ^ s); if(disired_nokori < A[i]){ ll kesu = A[i] - disired_nokori; if(kesu <= K && x > kesu){ x = kesu; id = i; } } p++; } } if(id == -1){ auto p = st.rbegin(); while(p != st.rend()){ auto [a,i] = *p; if(0 < A[i]){ ll kesu = 1; if(kesu <= K){ x = kesu; id = i; break; } } p++; } s = -1; } auto it = st.find(make_tuple(A[id],id)); st.erase(it); cout << id + 1 << " " << x << endl; if(s != -1) s ^= A[id]; A[id] -= x; s2 -= x; st.emplace(A[id],id); if(s != -1) s ^= A[id]; K = x; } ll ret; cin >> ret; if(ret != 0) return 0; p ^= 1; } }