結果
問題 | No.1228 I hate XOR Matching |
ユーザー |
|
提出日時 | 2020-09-11 23:02:50 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 2,072 bytes |
コンパイル時間 | 1,880 ms |
コンパイル使用メモリ | 72,184 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-27 19:07:07 |
合計ジャッジ時間 | 6,688 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 31 |
コンパイルメッセージ
main.cpp:96:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type] 96 | main() | ^~~~
ソースコード
#include<iostream> #include<vector> using namespace std; int K,X; int outbit; vector<int>ans; void g7(int,int,int); void g4(int,int); void g11(int a,int b,int c) { g7(a,b,c); a=1<<a;b=1<<b;c=1<<c; ans.push_back(a|c); ans.push_back(a|c); ans.push_back(b|c); ans.push_back(b|c); } void g7(int a,int b,int c) { g4(a,b); a=1<<a;b=1<<b;c=1<<c; ans.push_back(c); ans.push_back(c); ans.push_back(a|b|c); ans.push_back(a|b|c); } void g4(int a,int b) { a=1<<a;b=1<<b; ans.push_back(a); ans.push_back(a); ans.push_back(b); ans.push_back(b); ans.push_back(a|b); ans.push_back(a|b); } void f(int cnt) { if(cnt<=19) { for(int i=0;i<20;i++) { if(i!=outbit&&cnt>0) { cnt--; ans.push_back(1<<i); ans.push_back(1<<i); } } return; } vector<int>ok; for(int i=0;i<20;i++)if(i!=outbit)ok.push_back(i); if(cnt==21) { g7(ok[0],ok[1],ok[2]); g7(ok[3],ok[4],ok[5]); g7(ok[6],ok[7],ok[8]); return; } g11(ok[0],ok[1],ok[2]); if(cnt==20||cnt==25) { g7(ok[4],ok[5],ok[6]); if(cnt==20) { ans.push_back(0); ans.push_back(0); } else { g7(ok[7],ok[8],ok[9]); } return; } g11(ok[4],ok[5],ok[6]); if(cnt==22)return; if(cnt==23||cnt==24) { ans.push_back(0); if(cnt==24)ans.push_back(0); return; } if(cnt==29) { g7(ok[8],ok[9],ok[10]); return; } g4(ok[8],ok[9]); if(cnt==27||cnt==28) { ans.push_back(0); if(cnt==28)ans.push_back(0); } } main() { cin>>K>>X; if(K==0) { if(X==0) { ans.push_back(1); } else if((X+1&-X-1)==X+1) { X+=1; int cnt=0; while(X>1) { X/=2; cnt++; } outbit=-1; f(cnt); } } else { if(X==0) { ans.push_back(0); } else if(X==1) { ans.push_back(K); } else if((X&-X)==X) { int cnt=0; while(X>1) { X/=2; cnt++; } while(!(K>>outbit&1))outbit++; f(cnt); ans.push_back(K); } } if(ans.empty())cout<<"No"<<endl; else { cout<<"Yes"<<endl<<ans.size()<<endl; for(int i=0;i<ans.size();i++) { cout<<ans[i]; if(i+1==ans.size())cout<<"\n"; else cout<<" "; } } }