結果
| 問題 |
No.187 中華風 (Hard)
|
| コンテスト | |
| ユーザー |
neterukun
|
| 提出日時 | 2021-05-03 14:02:16 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,573 bytes |
| コンパイル時間 | 307 ms |
| コンパイル使用メモリ | 82,472 KB |
| 実行使用メモリ | 76,944 KB |
| 最終ジャッジ日時 | 2024-07-22 04:17:06 |
| 合計ジャッジ時間 | 8,364 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 RE * 3 |
ソースコード
def extended_gcd(a, b):
if b == 0:
return a, 1, 0
else:
g, y, x = extended_gcd(b, a % b)
y -= (a // b) * x
return g, x, y
def mod_inv(a, p):
_, x, _ = extended_gcd(a, p)
return x % p
def pregarner(a, m, MOD):
def gcd(a, b):
while b:
a, b = b, a % b
return a
a, m = a[:], m[:]
n = len(a)
for i in range(n):
for j in range(i):
g = gcd(m[i], m[j])
if (a[i] - a[j]) % g != 0:
return -1
m[i], m[j] = m[i] // g, m[j] // g
gi = gcd(m[i], g)
gj = g // gi
while True:
g = gcd(gi, gj)
gi, gj = gi * g, gj // g
if g == 1:
break
m[i], m[j] = m[i] * gi, m[j] * gj
a[i], a[j] = a[i] % m[i], a[j] % m[j]
lcm = 1
for i in range(n):
lcm = lcm * m[i] % MOD
return lcm, a, m
def garner(a, m, MOD):
n = len(m)
m = m + [MOD]
coeff = [1] * (n + 1)
res = [0] * (n + 1)
for i in range(n):
t = (a[i] - res[i]) * mod_inv(coeff[i], m[i]) % m[i]
for j in range(i + 1, n + 1):
res[j] = (res[j] + t * coeff[j]) % m[j]
coeff[j] = coeff[j] * m[i] % m[j]
return res[-1]
n = int(input())
info = [list(map(int, input().split())) for i in range(n)]
MOD = 10 ** 9 + 7
x, y = list(zip(*info))
x, y = list(x), list(y)
lcm, x, y = pregarner(x, y, MOD)
m = garner(x, y, MOD)
if sum(x) == 0 or lcm == -1:
print(lcm)
else:
print(m)
neterukun