結果
| 問題 |
No.1863 Xor Sum 2...?
|
| コンテスト | |
| ユーザー |
puzneko
|
| 提出日時 | 2022-04-08 00:21:44 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 258 ms / 2,000 ms |
| コード長 | 1,166 bytes |
| コンパイル時間 | 542 ms |
| コンパイル使用メモリ | 81,664 KB |
| 実行使用メモリ | 112,180 KB |
| 最終ジャッジ日時 | 2024-11-28 02:42:04 |
| 合計ジャッジ時間 | 7,690 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
from sys import stdin
n = int(stdin.readline().rstrip())
a = [int(x) for x in stdin.readline().rstrip().split()]
b = [int(x) for x in stdin.readline().rstrip().split()]
bitruiseki = [[0 for i in range(30)] for j in range(n+1)]
for i in range(n):
val = a[i]
for j in range(30):
if val & 1:
bitruiseki[i+1][j] = bitruiseki[i][j] + 1
else:
bitruiseki[i+1][j] = bitruiseki[i][j]
val = val >> 1
bxor = [0 for i in range(n+1)]
for i in range(n):
bxor[i+1] = bxor[i] ^ b[i]
bxornum = [0 for i in range(n+1)]
for i in range(n):
bxornum[i+1] = bxornum[i] + bxor[i]
left = 1
ans = 0
for i in range(1,n+1):
check = False
for j in range(30):
if bitruiseki[i][j] - bitruiseki[left-1][j] >= 2:
check = True
break
while check:
left += 1
check = False
for j in range(30):
if bitruiseki[i][j] - bitruiseki[left-1][j] >= 2:
check = True
break
if bxor[i] == 1:
ans += bxornum[i] - bxornum[left-1]
else:
ans += i - left + 1 - (bxornum[i] - bxornum[left-1])
print("{}".format(ans))
puzneko