結果
問題 |
No.2272 多項式乗算 mod 258280327
|
ユーザー |
![]() |
提出日時 | 2025-06-12 18:12:46 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,126 bytes |
コンパイル時間 | 151 ms |
コンパイル使用メモリ | 81,932 KB |
実行使用メモリ | 233,040 KB |
最終ジャッジ日時 | 2025-06-12 18:14:13 |
合計ジャッジ時間 | 7,062 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 26 WA * 3 TLE * 1 -- * 3 |
ソースコード
MOD = 258280327 def multiply(a, b): len_a = len(a) len_b = len(b) if len_a == 0 or len_b == 0: return [] if len_a < len_b: a, b = b, a len_a, len_b = len_b, len_a if len_b <= 32: res = [0] * (len_a + len_b - 1) for i in range(len_a): ai = a[i] if ai == 0: continue for j in range(len_b): if i + j >= len(res): break res[i+j] = (res[i+j] + ai * b[j]) % MOD return res split = (len_a + 1) // 2 a0 = a[:split] a1 = a[split:] b0 = b[:min(split, len_b)] b1 = b[min(split, len_b):] z0 = multiply(a0, b0) z2 = multiply(a1, b1) a01 = [] max_a = max(len(a0), len(a1)) for i in range(max_a): val = 0 if i < len(a0): val += a0[i] if i < len(a1): val += a1[i] a01.append(val % MOD) b01 = [] max_b = max(len(b0), len(b1)) for i in range(max_b): val = 0 if i < len(b0): val += b0[i] if i < len(b1): val += b1[i] b01.append(val % MOD) z1 = multiply(a01, b01) z1 = subtract(z1, z0) z1 = subtract(z1, z2) res = [0] * (len_a + len_b - 1) for i in range(len(z0)): res[i] = (res[i] + z0[i]) % MOD for i in range(len(z1)): pos = i + split if pos < len(res): res[pos] = (res[pos] + z1[i]) % MOD for i in range(len(z2)): pos = i + 2 * split if pos < len(res): res[pos] = (res[pos] + z2[i]) % MOD return res def subtract(a, b): res = a.copy() for i in range(len(b)): if i < len(res): res[i] = (res[i] - b[i]) % MOD return res n = int(input()) F = list(map(int, input().split())) m = int(input()) G = list(map(int, input().split())) F = [x % MOD for x in F] G = [x % MOD for x in G] product = multiply(F, G) while len(product) > 1 and product[-1] == 0: product.pop() L = len(product) - 1 print(L) print(' '.join(map(str, product)) if product else '0')