結果
問題 | No.1142 XOR と XOR |
ユーザー | Drice |
提出日時 | 2020-07-31 22:20:38 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 806 ms
5,248 KB |
testcase_04 | AC | 633 ms
5,248 KB |
testcase_05 | AC | 520 ms
5,248 KB |
testcase_06 | AC | 654 ms
5,248 KB |
testcase_07 | AC | 800 ms
5,248 KB |
testcase_08 | AC | 804 ms
5,248 KB |
testcase_09 | AC | 806 ms
5,248 KB |
testcase_10 | AC | 804 ms
5,248 KB |
testcase_11 | AC | 2 ms
5,248 KB |
testcase_12 | AC | 2 ms
5,248 KB |
testcase_13 | AC | 2 ms
5,248 KB |
testcase_14 | AC | 428 ms
5,248 KB |
testcase_15 | AC | 417 ms
5,248 KB |
testcase_16 | AC | 35 ms
5,248 KB |
testcase_17 | AC | 601 ms
5,248 KB |
testcase_18 | AC | 136 ms
5,248 KB |
testcase_19 | AC | 651 ms
5,248 KB |
testcase_20 | AC | 419 ms
5,248 KB |
testcase_21 | AC | 259 ms
5,248 KB |
testcase_22 | AC | 145 ms
5,248 KB |
testcase_23 | AC | 608 ms
5,248 KB |
testcase_24 | AC | 687 ms
5,248 KB |
testcase_25 | AC | 395 ms
5,248 KB |
testcase_26 | AC | 643 ms
5,248 KB |
testcase_27 | AC | 516 ms
5,248 KB |
ソースコード
#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; }