結果
| 問題 |
No.187 中華風 (Hard)
|
| コンテスト | |
| ユーザー |
akasia_midori
|
| 提出日時 | 2023-11-23 02:54:38 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,571 bytes |
| コンパイル時間 | 186 ms |
| コンパイル使用メモリ | 81,792 KB |
| 実行使用メモリ | 76,544 KB |
| 最終ジャッジ日時 | 2024-09-26 07:50:53 |
| 合計ジャッジ時間 | 3,105 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 WA * 3 |
ソースコード
import math
# Extended Euclidean Algorithm
def extgcd(a, b):
if b:
d, y, x = extgcd(b, a % b)
y -= (a // b)*x
return d, x, y
return a, 1, 0
# lcm (least common multiple)
def lcm(m, n):
return math.lcm(m,n)
def Chineese_mod_theory(b, m):
# 求めたいxがあって m1とm2が互いに疎であり、x%m1≡b1, x%m2≡b2であるとき
# x = b1m2 + b2m1 である
# 例えば b1m2%m1≡b1, b2m1%m1≡0である
# これは拡張ユークリッドの互除法で考えると
# m1p1 + m2p2 = d(=gcd(m1, m2))
# s = (b1-b2)/d と置くと
# m1p1s + m2p2s = b1-b2
# x = b2 + m2p2s, x = b1 - m1p1s
# のどっちかを解けばいい
MOD = 10**9 + 7
M = 1
r = 0
for i in range(len(b)):
d, p1, p2 = extgcd(M, m[i])
if (b[i]-r)%d != 0:
return (-1,0)
s = (b[i]-r)//d
tmp = (s * p1) % (m[i]//d)
r = (r + M*tmp)
M = (M * (m[i]//d))
return (r%M), M
def oi(): return int(input())
def os(): return input()
def mi(): return list(map(int, input().split()))
# import sys
# input = sys.stdin.readline
# import sys
# sys.setrecursionlimit(10**8)
# import pypyjit
# pypyjit.set_param('max_unroll_recursion=-1')
# input_count = 0
input_count = 0
N = oi()
amari = []
wari = []
all_zero = True
for _ in range(N):
x,y = mi()
wari.append(y)
amari.append(x)
if x != 0:
all_zero = False
out = Chineese_mod_theory(amari, wari)
if all_zero:
print(out[1]%(10**9+7))
else:
print(out[0]%(10**9+7))
akasia_midori