結果
| 問題 |
No.187 中華風 (Hard)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-09-21 01:24:26 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 461 ms / 3,000 ms |
| コード長 | 2,603 bytes |
| コンパイル時間 | 121 ms |
| コンパイル使用メモリ | 13,056 KB |
| 実行使用メモリ | 12,416 KB |
| 最終ジャッジ日時 | 2024-07-06 20:08:39 |
| 合計ジャッジ時間 | 5,023 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 |
ソースコード
import sys
V = sys.version_info
_39 = False
_310 = False
_311 = False
if V.major == 3:
_39 = V.minor >= 9
_310 = V.minor >= 10
_311 = V.minor >= 11
if _39:
li = list
tup = tuple
dic = dict
st = set
ty = type
else:
from typing import (
List,
Tuple,
Type,
Dict,
Set,
)
li = List
tup = Tuple
dic = Dict
st = Set
ty = Type
from sys import stdin
read = stdin.buffer.read
rl = stdin.buffer.readline
rb = lambda: rl().split()
rls = stdin.buffer.readlines
from typing import (
TypeVar,
Sequence as Seq,
Iterable as Iter,
Protocol as Proto,
Generic as Gen,
)
from typing import Callable as Fn
from typing import Iterable
def prints(
a: Iterable[object],
sep: str = "\n",
) -> None:
print(sep.join(map(str, a)))
# import numpy as np
def egcd(
a: int,
b: int,
) -> tup[int, int, int]:
if not b:
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
def crt_mod(
m: Seq[int],
r: Seq[int],
mod: int,
) -> int:
l = len(m)
assert len(r) == l
m = list(m) + [mod]
p = [1] * (l + 1)
x = [0] * (l + 1)
for i, (n, b) in enumerate(zip(m, r)):
assert n > 0
g, ip, _ = egcd(p[i], n)
q, a = divmod(b - 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]
def factorize(n: int) -> li[tup[int, int]]:
f = []
for i in range(2, n):
if i * i > n:
break
if n % i:
continue
c = 0
while n % i == 0:
n //= i
c += 1
f.append((i, c))
if n > 1:
f.append((n, 1))
return f
def factorize_lcm(
a: Iter[int],
) -> dic[int, int]:
f = dict()
for x in a:
for p, e in factorize(x):
c = f.get(p, 0)
f[p] = max(c, e)
return f
def lcm_mod(m: int, a: Iter[int]) -> int:
l = 1
for p, e in factorize_lcm(a).items():
l = l * pow(p, e, m) % m
return l
def solve() -> None:
n = int(rl())
rm = [map(int, rb()) for _ in range(n)]
r, m = list(zip(*rm))
mod = 10**9 + 7
if max(r) == 0:
print(lcm_mod(mod, m))
else:
print(crt_mod(m, r, mod))
def main() -> None:
t = 1
# t = int(rl())
for _ in range(t):
solve()
main()