結果
問題 | No.1655 123 Swaps |
ユーザー |
![]() |
提出日時 | 2021-06-25 02:26:56 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 398 ms / 2,000 ms |
コード長 | 2,439 bytes |
コンパイル時間 | 155 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 135,808 KB |
最終ジャッジ日時 | 2024-10-14 02:15:27 |
合計ジャッジ時間 | 9,743 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 42 |
ソースコード
p, g, ig = 924844033, 5, 554906420W = [pow(g, (p - 1) >> i, p) for i in range(24)]iW = [pow(ig, (p - 1) >> i, p) for i in range(24)]P = pnn = 600600fa = [1] * (nn+1)fainv = [1] * (nn+1)for i in range(nn):fa[i+1] = fa[i] * (i+1) % Pfainv[-1] = pow(fa[-1], P-2, P)for i in range(nn)[::-1]:fainv[i] = fainv[i+1] * (i+1) % Pdef convolve(a, b):def fft(f):for l in range(k, 0, -1):d = 1 << l - 1U = [1]for i in range(d):U.append(U[-1] * W[l] % p)for i in range(1 << k - l):for j in range(d):s = i * 2 * d + jt = s + df[s], f[t] = (f[s] + f[t]) % p, U[j] * (f[s] - f[t]) % pdef ifft(f):for l in range(1, k + 1):d = 1 << l - 1U = [1]for i in range(d):U.append(U[-1] * iW[l] % p)for i in range(1 << k - l):for j in range(d):s = i * 2 * d + jt = s + df[s], f[t] = (f[s] + f[t] * U[j]) % p, (f[s] - f[t] * U[j]) % pn0 = len(a) + len(b) - 1if len(a) < 50 or len(b) < 50:ret = [0] * n0if len(a) > len(b): a, b = b, afor i, aa in enumerate(a):for j, bb in enumerate(b):ret[i+j] = (ret[i+j] + aa * bb) % preturn retk = (n0).bit_length()n = 1 << ka = a + [0] * (n - len(a))b = b + [0] * (n - len(b))fft(a), fft(b)for i in range(n):a[i] = a[i] * b[i] % pifft(a)invn = pow(n, p - 2, p)for i in range(n0):a[i] = a[i] * invn % pdel a[n0:]return adef calc(a, b, c):M = a + b + cif M % 2: return 0M //= 2i3 = pow(3, P - 2, P)re = 0www = [1, 667811836, 257032196] # Cube root of 1 mod PA = [fainv[i] * fainv[a-i] % P * www[(2*i-a)%3] % P for i in range(a + 1)]B = [fainv[i] * fainv[b-i] % P * www[(b-2*i)%3] % P for i in range(b + 1)]AB = convolve(A, B)for i, x in enumerate(AB):if i > M: continuej = M - a - b + iif j < 0: continuere = (re + x * fainv[M-i] % P * fainv[j]) % Pre = fa[M] ** 2 % P * re % P * 2 * i3 % Pre = (re + fa[M*2] * fainv[a] * fainv[b] * fainv[c] * i3) % Preturn rea, b, c = map(int, input().split())print(calc(a, b, c))