結果
問題 | No.911 ラッキーソート |
ユーザー | LayCurse |
提出日時 | 2019-11-02 11:30:12 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 186 ms / 2,000 ms |
コード長 | 5,150 bytes |
コンパイル時間 | 2,683 ms |
コンパイル使用メモリ | 213,864 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-14 23:03:42 |
合計ジャッジ時間 | 7,870 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 3 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 3 ms
5,376 KB |
testcase_06 | AC | 3 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 3 ms
5,376 KB |
testcase_09 | AC | 3 ms
5,376 KB |
testcase_10 | AC | 3 ms
5,376 KB |
testcase_11 | AC | 3 ms
5,376 KB |
testcase_12 | AC | 3 ms
5,376 KB |
testcase_13 | AC | 186 ms
5,376 KB |
testcase_14 | AC | 101 ms
5,376 KB |
testcase_15 | AC | 102 ms
5,376 KB |
testcase_16 | AC | 103 ms
5,376 KB |
testcase_17 | AC | 97 ms
5,376 KB |
testcase_18 | AC | 95 ms
5,376 KB |
testcase_19 | AC | 93 ms
5,376 KB |
testcase_20 | AC | 88 ms
5,376 KB |
testcase_21 | AC | 79 ms
5,376 KB |
testcase_22 | AC | 73 ms
5,376 KB |
testcase_23 | AC | 69 ms
5,376 KB |
testcase_24 | AC | 62 ms
5,376 KB |
testcase_25 | AC | 36 ms
5,376 KB |
testcase_26 | AC | 31 ms
5,376 KB |
testcase_27 | AC | 13 ms
5,376 KB |
testcase_28 | AC | 7 ms
5,376 KB |
testcase_29 | AC | 3 ms
5,376 KB |
testcase_30 | AC | 2 ms
5,376 KB |
testcase_31 | AC | 2 ms
5,376 KB |
testcase_32 | AC | 2 ms
5,376 KB |
testcase_33 | AC | 2 ms
5,376 KB |
testcase_34 | AC | 2 ms
5,376 KB |
testcase_35 | AC | 2 ms
5,376 KB |
testcase_36 | AC | 2 ms
5,376 KB |
testcase_37 | AC | 2 ms
5,376 KB |
testcase_38 | AC | 96 ms
5,376 KB |
testcase_39 | AC | 71 ms
5,376 KB |
testcase_40 | AC | 4 ms
5,376 KB |
testcase_41 | AC | 90 ms
5,376 KB |
testcase_42 | AC | 51 ms
5,376 KB |
testcase_43 | AC | 98 ms
5,376 KB |
testcase_44 | AC | 16 ms
5,376 KB |
testcase_45 | AC | 35 ms
5,376 KB |
testcase_46 | AC | 48 ms
5,376 KB |
testcase_47 | AC | 21 ms
5,376 KB |
testcase_48 | AC | 14 ms
5,376 KB |
ソースコード
#pragma GCC optimize ("Ofast") #include<bits/stdc++.h> using namespace std; inline void rd(int &x){ int k; int m=0; x=0; for(;;){ k = getchar_unlocked(); if(k=='-'){ m=1; break; } if('0'<=k&&k<='9'){ x=k-'0'; break; } } for(;;){ k = getchar_unlocked(); if(k<'0'||k>'9'){ break; } x=x*10+k-'0'; } if(m){ x=-x; } } inline void rd(long long &x){ int k; int m=0; x=0; for(;;){ k = getchar_unlocked(); if(k=='-'){ m=1; break; } if('0'<=k&&k<='9'){ x=k-'0'; break; } } for(;;){ k = getchar_unlocked(); if(k<'0'||k>'9'){ break; } x=x*10+k-'0'; } if(m){ x=-x; } } inline void wt_L(char a){ putchar_unlocked(a); } inline void wt_L(int x){ int s=0; int m=0; char f[10]; if(x<0){ m=1; x=-x; } while(x){ f[s++]=x%10; x/=10; } if(!s){ f[s++]=0; } if(m){ putchar_unlocked('-'); } while(s--){ putchar_unlocked(f[s]+'0'); } } inline void wt_L(unsigned x){ int s=0; char f[10]; while(x){ f[s++]=x%10; x/=10; } if(!s){ f[s++]=0; } while(s--){ putchar_unlocked(f[s]+'0'); } } inline void wt_L(long long x){ int s=0; int m=0; char f[20]; if(x<0){ m=1; x=-x; } while(x){ f[s++]=x%10; x/=10; } if(!s){ f[s++]=0; } if(m){ putchar_unlocked('-'); } while(s--){ putchar_unlocked(f[s]+'0'); } } inline void wt_L(unsigned long long x){ int s=0; char f[21]; while(x){ f[s++]=x%10; x/=10; } if(!s){ f[s++]=0; } while(s--){ putchar_unlocked(f[s]+'0'); } } inline void wt_L(double x){ printf("%.15f",x); } inline void wt_L(const char c[]){ int i=0; for(i=0;c[i]!='\0';i++){ putchar_unlocked(c[i]); } } inline void wt_L(string &x){ int i=0; for(i=0;x[i]!='\0';i++){ putchar_unlocked(x[i]); } } template<class S, class T> inline S chmin(S &a, T b){ if(a>b){ a=b; } return a; } template<class S, class T> inline S chmax(S &a, T b){ if(a<b){ a=b; } return a; } int N; long long LL; long long RR; long long A[200000]; int cond[62]; int L[62]; int R[62]; void doit(int k, int a, int b){ int i; int mn0; int mx0; int mn1; int mx1; if(k < 0){ return; } mn0 = mn1 = 1073709056; mx0 = mx1 = -1073709056; for(i=(a);i<(b+1);i++){ if(A[i] & (1LL<<k)){ chmin(mn1, i); chmax(mx1, i); } else{ chmin(mn0, i); chmax(mx0, i); } } if(mn0 == 1073709056 || mn1 == 1073709056){ doit(k-1, a, b); return; } if(mx0 < mn1){ cond[k] |= 2; doit(k-1, a, mx0); doit(k-1, mn1, b); } else if(mx1 < mn0){ cond[k] |= 1; doit(k-1, a, mx1); doit(k-1, mn0, b); } else{ cond[k] |= 3; } } long long dp[2][2][62]; long long solve(int x, int y, int d){ long long res = 0; if(d < 0){ return 1; } if(dp[x][y][d] >= 0){ return dp[x][y][d]; } if(!((cond[d]) &(1<<(0)))&& (L[d]==0 || x)){ if(R[d]==1){ res += solve(x,1, d-1); } else{ res += solve(x,y, d-1); } } if(!((cond[d]) &(1<<(1)))&& (R[d]==1 || y)){ if(L[d]==0){ res += solve(1, y, d-1); } else{ res += solve(x, y, d-1); } } return dp[x][y][d] = res; } int main(){ int i; rd(N); rd(LL); rd(RR); { int Lj4PdHRW; for(Lj4PdHRW=(0);Lj4PdHRW<(N);Lj4PdHRW++){ rd(A[Lj4PdHRW]); } } for(i=(0);i<(62);i++){ if(LL&(1LL<<i)){ L[i] = 1; } } for(i=(0);i<(62);i++){ if(RR&(1LL<<i)){ R[i] = 1; } } doit(61, 0, N-1); for(i=(0);i<(2);i++){ int j; for(j=(0);j<(2);j++){ int k; for(k=(0);k<(62);k++){ dp[i][j][k] = -1; } } } wt_L(solve(0,0,61)); wt_L('\n'); return 0; } // cLay varsion 20191102-1 // --- original code --- // int N; ll LL, RR; // ll A[2d5]; // // int cond[62]; // int L[62], R[62]; // // void doit(int k, int a, int b){ // int mn0, mx0, mn1, mx1; // if(k < 0) return; // mn0 = mn1 = int_inf; // mx0 = mx1 = -int_inf; // rep(i,a,b+1){ // if(A[i] & (1LL<<k)){ // mn1 <?= i; // mx1 >?= i; // } else { // mn0 <?= i; // mx0 >?= i; // } // } // if(mn0 == int_inf || mn1 == int_inf) doit(k-1, a, b), return; // if(mx0 < mn1){ // cond[k] |= 2; // doit(k-1, a, mx0); // doit(k-1, mn1, b); // } else if(mx1 < mn0){ // cond[k] |= 1; // doit(k-1, a, mx1); // doit(k-1, mn0, b); // } else { // cond[k] |= 3; // } // } // // ll dp[2][2][62]; // ll solve(int x, int y, int d){ // ll res = 0; // if(d < 0) return 1; // if(dp[x][y][d] >= 0) return dp[x][y][d]; // if(!BIT_ith(cond[d],0) && (L[d]==0 || x)) res += solve(x, if[R[d]==1,1,y], d-1); // if(!BIT_ith(cond[d],1) && (R[d]==1 || y)) res += solve(if[L[d]==0,1,x], y, d-1); // return dp[x][y][d] = res; // } // // { // rd(N,LL,RR,A(N)); // rep(i,62) if(LL&(1LL<<i)) L[i] = 1; // rep(i,62) if(RR&(1LL<<i)) R[i] = 1; // doit(61, 0, N-1); // rep(i,2) rep(j,2) rep(k,62) dp[i][j][k] = -1; // wt(solve(0,0,61)); // }