結果
問題 |
No.1240 Or Sum of Xor Pair
|
ユーザー |
|
提出日時 | 2025-10-02 23:53:13 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,436 ms / 2,000 ms |
コード長 | 1,314 bytes |
コンパイル時間 | 3,445 ms |
コンパイル使用メモリ | 278,656 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-10-02 23:53:35 |
合計ジャッジ時間 | 20,650 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define i64 long long int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n,limt; cin>>n>>limt; vector<int>a(n); for(int i=0;i<n;i++) cin>>a[i]; const int B=9; const int M=1<<B; const int mask=M-1; static int cnt[M][M]; static int cnt2[M][B]; static int cnt3[M]; i64 res=0; int hi=limt>>B; int lo=limt&mask; for(int v:a){ int x=v>>B; int y=v&mask; for(int t=0;t<hi;t++){ int nx=x^t; int c=cnt3[nx]; if(c){ i64 tmp=((x|nx)<<B); res+=(tmp+y)* (i64)c; for(int i=0;i<B;i++){ if(((y>>i)&1)==0){ res+= ( (i64)1<<i ) * (i64)cnt2[nx][i]; } } } } int nx=x^hi; if(0<=nx && nx<M){ i64 tmp=((x|nx)<<B); for(int t=0;t<lo;t++){ int ny=y^t; int c=cnt[nx][ny]; if(c){ res+= (tmp + ( (y|ny) )) * (i64)c; } } } cnt[x][y]++; for(int i=0;i<B;i++) if((y>>i)&1) cnt2[x][i]++; cnt3[x]++; } cout<<res<<"\n"; return 0; }