結果
問題 | No.1142 XOR と XOR |
ユーザー |
|
提出日時 | 2020-07-31 22:20:38 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 806 ms / 2,000 ms |
コード長 | 1,071 bytes |
コンパイル時間 | 256 ms |
コンパイル使用メモリ | 32,768 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-08 03:30:08 |
合計ジャッジ時間 | 13,147 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 |
ソースコード
#include<cstdio>const long long mod = 1e9+7;long long countA[2048], countB[2048];long long map[2048];int a[200005], b[200005];void preWork(int seq[],int n,long long count[]){for(int i = 0; i < 1024; i++) map[i] = count[i] = 0;map[0] = 1;int prefix = 0;for(int i = 1; i <= n; i++){int u = prefix^seq[i]; prefix = u;for(int j = 0; j < 1024; j++){count[j] += map[u^j]; if(count[j]>=mod) count[j] -= mod;}map[u]++;}}int main(){int n,m,k;scanf("%d%d%d",&n,&m,&k);for(int i = 1; i <= n; i++) scanf("%d",&a[i]);preWork(a,n,countA);//for(int i = 0; i < 1024; i++) if(countA[i]!=0) printf("countA[%d] = %lld\n",i,countA[i]);for(int i = 1; i <= m; i++) scanf("%d",&b[i]);preWork(b,m,countB);//for(int i = 0; i < 1024; i++) if(countB[i]!=0) printf("countB[%d] = %lld\n",i,countB[i]);long long ans = 0;for(int i = 0; i < 1024; i++){ans += countA[i]*countB[k^i]%mod; if(ans>=mod) ans -= mod;}printf("%lld\n",ans);return 0;}