結果
問題 | No.2165 Let's Play Nim! |
ユーザー |
|
提出日時 | 2022-12-18 12:43:08 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 188 ms / 2,000 ms |
コード長 | 1,085 bytes |
コンパイル時間 | 2,066 ms |
コンパイル使用メモリ | 201,804 KB |
最終ジャッジ日時 | 2025-02-09 16:05:09 |
ジャッジサーバーID (参考情報) |
judge3 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 38 |
ソースコード
#include<bits/stdc++.h>using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int N;cin>>N;vector<int>A(N);for(auto &i:A)cin>>i;int t=0;for(int i:A)t^=i;vector<set<int>>b(17);for(int i=0;i<N;i++){for(int j=0;j<17;j++){if(A[i]>>j&1)b[j].insert(i);}}int p=0;if(t){cout<<1<<endl;p=1;}else{cout<<0<<endl;}int ret=0;while(ret!=-1){if(p){int k=0;for(int i=0;i<17;i++){if(t>>i&1)k=i;}int I=*b[k].begin(),K=A[I]-(A[I]^t);for(int i=0;i<17;i++){b[i].erase(I);}t^=A[I];A[I]-=K;t^=A[I];for(int i=0;i<17;i++){if(A[I]>>i&1)b[i].insert(I);}cout<<I+1<<' '<<K<<endl;}else{int I,K;cin>>I>>K;--I;for(int i=0;i<17;i++){b[i].erase(I);}t^=A[I];A[I]-=K;t^=A[I];for(int i=0;i<17;i++){if(A[I]>>i&1)b[i].insert(I);}}p=1-p;cin>>ret;//for(int i:A)cout<<i<<' ';cout<<endl;}}