結果
| 問題 |
No.1958 Bit Game
|
| コンテスト | |
| ユーザー |
nephrologist
|
| 提出日時 | 2022-05-27 22:08:41 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 437 ms / 2,000 ms |
| コード長 | 1,227 bytes |
| コンパイル時間 | 150 ms |
| コンパイル使用メモリ | 82,292 KB |
| 実行使用メモリ | 122,420 KB |
| 最終ジャッジ日時 | 2024-09-20 15:58:16 |
| 合計ジャッジ時間 | 11,564 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 30 |
ソースコード
import sys
input = sys.stdin.buffer.readline
n, x, y = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
cntA = [0] * (20)
cntB = [0] * 20
for i in range(x):
for num in range(20):
if (A[i] >> num) & 1:
cntA[num] += 1
for i in range(y):
for num in range(20):
if (B[i] >> num) & 1:
cntB[num] += 1
# print("x", x, file=sys.stderr)
# print("y", y, file=sys.stderr)
# print(cntA, file=sys.stderr)
# print(cntB, file=sys.stderr)
ans = 0
mod = 998244353
def calc(p0, p1, a, b, c, d):
r0 = 0
r1 = 0
r0 += p0 * a % mod
r1 += (p0 * b % mod + p1 * (a + b)) % mod
r0, r1 = (r0 * (c + d) % mod + r1 * c % mod) % mod, r1 * d % mod
return r0, r1
ans = 0
for i in range(20):
xx = cntA[i]
xxx = x - xx
yy = cntB[i]
yyy = y - yy
t0, t1 = 1, 0
for _ in range(n):
# print("hoge", t0, t1, xxx, xx, yyy, yy, file=sys.stderr)
t0, t1 = calc(t0, t1, xxx, xx, yyy, yy)
# print("t1", t1, file=sys.stderr)
# print("keisu", 1 << i, file=sys.stderr)
ans += (t1 * (1 << i)) % mod
# print("ans", ans, file=sys.stderr)
ans %= mod
# ans = pow(ans, n, mod)
print(ans)
nephrologist