結果
問題 | No.2024 Xer |
ユーザー | okkuukenken |
提出日時 | 2022-07-29 23:44:49 |
言語 | C++23 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 166 ms / 2,000 ms |
コード長 | 2,798 bytes |
コンパイル時間 | 1,855 ms |
コンパイル使用メモリ | 148,980 KB |
実行使用メモリ | 26,780 KB |
最終ジャッジ日時 | 2023-09-26 23:38:13 |
合計ジャッジ時間 | 6,571 ms |
ジャッジサーバーID (参考情報) |
judge14 / judge15 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
4,376 KB |
testcase_01 | AC | 2 ms
4,380 KB |
testcase_02 | AC | 1 ms
4,376 KB |
testcase_03 | AC | 2 ms
4,376 KB |
testcase_04 | AC | 1 ms
4,376 KB |
testcase_05 | AC | 2 ms
4,380 KB |
testcase_06 | AC | 2 ms
4,376 KB |
testcase_07 | AC | 144 ms
26,780 KB |
testcase_08 | AC | 124 ms
11,108 KB |
testcase_09 | AC | 96 ms
6,684 KB |
testcase_10 | AC | 122 ms
8,032 KB |
testcase_11 | AC | 52 ms
5,072 KB |
testcase_12 | AC | 84 ms
6,652 KB |
testcase_13 | AC | 112 ms
6,252 KB |
testcase_14 | AC | 140 ms
8,032 KB |
testcase_15 | AC | 74 ms
5,076 KB |
testcase_16 | AC | 109 ms
6,772 KB |
testcase_17 | AC | 54 ms
5,688 KB |
testcase_18 | AC | 64 ms
5,084 KB |
testcase_19 | AC | 163 ms
7,736 KB |
testcase_20 | AC | 90 ms
6,740 KB |
testcase_21 | AC | 161 ms
8,152 KB |
testcase_22 | AC | 164 ms
7,920 KB |
testcase_23 | AC | 166 ms
8,096 KB |
testcase_24 | AC | 154 ms
8,184 KB |
testcase_25 | AC | 3 ms
4,376 KB |
testcase_26 | AC | 4 ms
4,380 KB |
testcase_27 | AC | 4 ms
4,376 KB |
testcase_28 | AC | 2 ms
4,376 KB |
testcase_29 | AC | 3 ms
4,376 KB |
testcase_30 | AC | 5 ms
4,376 KB |
testcase_31 | AC | 5 ms
4,380 KB |
testcase_32 | AC | 6 ms
4,376 KB |
testcase_33 | AC | 3 ms
4,376 KB |
testcase_34 | AC | 2 ms
4,380 KB |
testcase_35 | AC | 2 ms
4,380 KB |
testcase_36 | AC | 4 ms
4,376 KB |
testcase_37 | AC | 5 ms
4,376 KB |
testcase_38 | AC | 5 ms
4,376 KB |
testcase_39 | AC | 2 ms
4,376 KB |
testcase_40 | AC | 2 ms
4,376 KB |
testcase_41 | AC | 4 ms
4,380 KB |
testcase_42 | AC | 4 ms
4,380 KB |
testcase_43 | AC | 4 ms
4,376 KB |
testcase_44 | AC | 5 ms
4,376 KB |
testcase_45 | AC | 74 ms
5,228 KB |
testcase_46 | AC | 18 ms
4,376 KB |
testcase_47 | AC | 56 ms
4,624 KB |
testcase_48 | AC | 1 ms
4,376 KB |
testcase_49 | AC | 1 ms
4,376 KB |
testcase_50 | AC | 2 ms
4,380 KB |
ソースコード
#define _USE_MATH_DEFINES #include<iostream> #include<vector> #include<algorithm> #include<cmath> #include<string> #include<iomanip> #include<numeric> #include<queue> #include<deque> #include<stack> #include<set> #include<map> #include<random> #include<bitset> #include<cassert> using namespace std; typedef long long ll; const int mod=998244353; const int dx[]={1,0,0,-1},dy[]={0,1,-1,0}; int solve(vector<int>a,int x,bool f,int d){ if(a.size()==0&&f) return 3; if(a.size()<=1) return 1; if(d==0) return 0; if(x>>d-1&1){ if(f){ for(int i=0;i<a.size()-1;i++) if(~(a[i]^a[i+1])>>d-1&1) return 0; return solve(a,x&~(1<<d),1,d-1); }else{ vector<int>l,r; for(int i=0;i<a.size();i++) if(a[i]>>d-1&1) r.push_back(a[i]&~(1<<d)); else l.push_back(a[i]); if(abs((int)l.size()-(int)r.size())>1) return 0; vector<int>v; if(l.size()>=r.size()){ for(int i=0;i<l.size();i++){ v.push_back(l[i]); if(i<r.size()) v.push_back(r[i]); } }else{ for(int i=0;i<r.size();i++){ v.push_back(r[i]); if(i<l.size()) v.push_back(l[i]); } } return solve(v,x&~(1<<d),1,d-1)>=1; } }else{ if(f){ vector<int>l1,r1,l2,r2; for(int i=0;i<a.size();i+=2) if(a[i]>>d-1&1) r1.push_back(a[i]&~(1<<d)); else l1.push_back(a[i]); for(int i=1;i<a.size();i+=2) if(a[i]>>d-1&1) r2.push_back(a[i]&~(1<<d)); else l2.push_back(a[i]); if(abs((int)l1.size()-(int)l2.size())>1) return 0; if(abs((int)r1.size()-(int)r2.size())>1) return 0; vector<int>vl,vr; if(l1.size()>=l2.size()){ for(int i=0;i<l1.size();i++){ vl.push_back(l1[i]); if(i<l2.size()) vl.push_back(l2[i]); } }else{ for(int i=0;i<l2.size();i++){ vl.push_back(l2[i]); if(i<l1.size()) vl.push_back(l1[i]); } } if(r1.size()>=r2.size()){ for(int i=0;i<r1.size();i++){ vr.push_back(r1[i]); if(i<r2.size()) vr.push_back(r2[i]); } }else{ for(int i=0;i<r2.size();i++){ vr.push_back(r2[i]); if(i<r1.size()) vr.push_back(r1[i]); } } if(l1.size()>l2.size()){ if(r1.size()==r2.size()) return solve(vl,x,1,d-1)&solve(vr,x,1,d-1)>>1; else return solve(vl,x,1,d-1)&solve(vr,x,1,d-1); }else if(l1.size()<l2.size()){ return(solve(vl,x,1,d-1)&solve(vr,x,1,d-1))<<1; }else return solve(vl,x,1,d-1)&solve(vr,x,1,d-1); }else{ vector<int>l,r; for(int i=0;i<a.size();i++) if(a[i]>>d-1&1) r.push_back(a[i]&~(1<<d)); else l.push_back(a[i]); return solve(l,x,0,d-1)&solve(r,x,0,d-1); } } } int main(){ int n,x,a[200000]; cin>>n>>x; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); cout<<(solve(vector<int>(a,a+n),x,0,30)?"Yes":"No")<<endl; }