結果
問題 | No.2024 Xer |
ユーザー | okkuukenken |
提出日時 | 2022-07-29 23:44:49 |
言語 | C++23 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 175 ms / 2,000 ms |
コード長 | 2,798 bytes |
コンパイル時間 | 1,940 ms |
コンパイル使用メモリ | 149,624 KB |
実行使用メモリ | 26,956 KB |
最終ジャッジ日時 | 2024-07-19 17:22:04 |
合計ジャッジ時間 | 6,178 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 149 ms
26,956 KB |
testcase_08 | AC | 133 ms
11,272 KB |
testcase_09 | AC | 101 ms
7,040 KB |
testcase_10 | AC | 131 ms
8,172 KB |
testcase_11 | AC | 54 ms
5,376 KB |
testcase_12 | AC | 88 ms
6,820 KB |
testcase_13 | AC | 117 ms
6,656 KB |
testcase_14 | AC | 149 ms
7,980 KB |
testcase_15 | AC | 78 ms
5,504 KB |
testcase_16 | AC | 116 ms
6,876 KB |
testcase_17 | AC | 58 ms
5,936 KB |
testcase_18 | AC | 67 ms
5,376 KB |
testcase_19 | AC | 171 ms
7,816 KB |
testcase_20 | AC | 95 ms
7,000 KB |
testcase_21 | AC | 169 ms
8,176 KB |
testcase_22 | AC | 172 ms
8,180 KB |
testcase_23 | AC | 175 ms
8,176 KB |
testcase_24 | AC | 162 ms
8,192 KB |
testcase_25 | AC | 3 ms
5,376 KB |
testcase_26 | AC | 6 ms
5,376 KB |
testcase_27 | AC | 5 ms
5,376 KB |
testcase_28 | AC | 3 ms
5,376 KB |
testcase_29 | AC | 3 ms
5,376 KB |
testcase_30 | AC | 5 ms
5,376 KB |
testcase_31 | AC | 5 ms
5,376 KB |
testcase_32 | AC | 6 ms
5,376 KB |
testcase_33 | AC | 5 ms
5,376 KB |
testcase_34 | AC | 2 ms
5,376 KB |
testcase_35 | AC | 2 ms
5,376 KB |
testcase_36 | AC | 4 ms
5,376 KB |
testcase_37 | AC | 5 ms
5,376 KB |
testcase_38 | AC | 6 ms
5,376 KB |
testcase_39 | AC | 2 ms
5,376 KB |
testcase_40 | AC | 3 ms
5,376 KB |
testcase_41 | AC | 5 ms
5,376 KB |
testcase_42 | AC | 5 ms
5,376 KB |
testcase_43 | AC | 4 ms
5,376 KB |
testcase_44 | AC | 4 ms
5,376 KB |
testcase_45 | AC | 80 ms
5,532 KB |
testcase_46 | AC | 19 ms
5,376 KB |
testcase_47 | AC | 63 ms
5,376 KB |
testcase_48 | AC | 2 ms
5,376 KB |
testcase_49 | AC | 3 ms
5,376 KB |
testcase_50 | AC | 3 ms
5,376 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; }