結果
問題 | No.187 中華風 (Hard) |
ユーザー | い |
提出日時 | 2023-09-21 01:56:39 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,262 bytes |
コンパイル時間 | 68 ms |
コンパイル使用メモリ | 13,056 KB |
実行使用メモリ | 44,900 KB |
最終ジャッジ日時 | 2024-07-06 20:39:48 |
合計ジャッジ時間 | 14,996 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | RE | - |
testcase_01 | RE | - |
testcase_02 | RE | - |
testcase_03 | RE | - |
testcase_04 | RE | - |
testcase_05 | RE | - |
testcase_06 | RE | - |
testcase_07 | RE | - |
testcase_08 | RE | - |
testcase_09 | RE | - |
testcase_10 | RE | - |
testcase_11 | RE | - |
testcase_12 | RE | - |
testcase_13 | RE | - |
testcase_14 | RE | - |
testcase_15 | RE | - |
testcase_16 | RE | - |
testcase_17 | RE | - |
testcase_18 | RE | - |
testcase_19 | RE | - |
testcase_20 | RE | - |
testcase_21 | RE | - |
testcase_22 | RE | - |
testcase_23 | RE | - |
testcase_24 | RE | - |
ソースコード
from sys import stdin import numpy as np from numba import njit, i8, i4, f8, b1, i1 read = stdin.buffer.read rl = stdin.buffer.readline def from_read(dtype=np.int64) -> np.ndarray: return np.fromstring( read().decode(), dtype=dtype, sep=" ", ) def from_readline( dtype=np.int64, ) -> np.ndarray: return np.fromstring( rl().decode(), dtype=dtype, sep=" ", ) @njit def factorize(n): f = [] for i in range(2, n): if i * i > n: break if n % i: continue e = 0 while n % i == 0: n //= i e += 1 f.append((i, e)) if n > 1: f.append((n, 1)) return f @njit def factorize_lcm(a): f = dict() for x in a: for p, e in factorize(x): c = f[p] if p in f else 0 f[p] = max(c, e) return f @njit def mpow(m, x, t): if t == 0: return 1 y = mpow(m, x, t >> 1) y = y * y % m if t & 1: y = y * x % m return y @njit def lcm_mod(m, a): l = 1 for p, e in factorize_lcm(a).items(): l = l * mpow(m, p, e) % m return l @njit def egcd(a, b): if b == 0: if a < 0: return (-a, -1, 0) return a, 1, 0 q, r = divmod(a, b) g, s, t = egcd(b, r) return g, t, s - q * t @njit def crt_mod(m, r, mod): l = m.size assert r.size == l m = np.append(m, mod) p = np.ones(l + 1, np.int64) x = np.zeros(l + 1, np.int64) for i in range(l): n = m[i] assert n > 0 g, ip, _ = egcd(p[i], n) q, a = divmod(r[i] - x[i], g) if a: return -1 n //= g t = q % n * ip % n for j in range(i + 1, l + 1): x[j] += t * p[j] x[j] %= m[j] p[j] = p[j] * n % m[j] return x[-1] @njit((i8, i8[:], i8[:]), cache=1) def solve(n, m, r): mod = 10**9 + 7 if r.max() == 0: res = lcm_mod(mod, m) else: res = crt_mod(m, r, mod) return res def main(): t = 1 # t = int(rl()) for _ in range(t): n = int(rl()) r, m = from_read().reshape(n, 2).T ans = solve(n, m, r) print(ans) main()