結果
| 問題 |
No.474 色塗り2
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-01-09 00:35:21 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,188 bytes |
| コンパイル時間 | 340 ms |
| コンパイル使用メモリ | 82,036 KB |
| 実行使用メモリ | 237,944 KB |
| 最終ジャッジ日時 | 2024-12-17 23:16:22 |
| 合計ジャッジ時間 | 2,752 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 1 WA * 3 |
ソースコード
import itertools
def init():
N = 2 * 10**6
vs = list(range(N + 1))
vs[0] = 1
p2 = [0] * (N + 1)
n2 = 1
while n2 <= N:
n2 <<= 1
for k in range(n2, N + 1, n2):
vs[k] //= 2
p2[k] += 1
fac = list(itertools.accumulate(vs, lambda x, y: (x * y) & 0b11111111111111111111))
p2 = list(itertools.accumulate(p2))
inv = calc_inv(fac, vs)
return vs, fac, inv, p2
def calc_inv(fac, vs):
mod = 2**20
mask = mod - 1
N = 2 * 10**6
inv = [1] * (N + 1)
invc = 506201
inv[N] = invc
for x in range(N - 1, 0, -1):
invc = (invc * vs[x + 1]) & mask
inv[x] = invc
return inv
vs, fac, inv, p2 = init()
def solve(A, B, C):
mask = 2**20 - 1
if A & (combin(B + C - 1, B, mask) + mask):
return 0
else:
return 1
def combin(n, b, mask):
a = n - b
p2num = p2[n]
p2den1 = p2[a]
p2den2 = p2[b]
valnum = fac[n]
valden1 = inv[a]
valden2 = inv[b]
return (2 ** (p2num - p2den1 - p2den2) * valnum * valden1 * valden2) & mask
T = int(input())
for t in range(T):
A, B, C = map(int, input().split())
print(solve(A, B, C))