結果

問題 No.187 中華風 (Hard)
ユーザー maspymaspy
提出日時 2020-03-31 02:41:08
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 495 ms / 3,000 ms
コード長 1,648 bytes
コンパイル時間 297 ms
コンパイル使用メモリ 87,120 KB
実行使用メモリ 77,476 KB
最終ジャッジ日時 2023-09-05 17:18:25
合計ジャッジ時間 9,927 ms
ジャッジサーバーID
(参考情報)
judge11 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 79 ms
71,720 KB
testcase_01 AC 78 ms
71,348 KB
testcase_02 AC 429 ms
77,348 KB
testcase_03 AC 417 ms
77,240 KB
testcase_04 AC 490 ms
77,220 KB
testcase_05 AC 490 ms
77,328 KB
testcase_06 AC 492 ms
77,176 KB
testcase_07 AC 490 ms
77,320 KB
testcase_08 AC 447 ms
77,192 KB
testcase_09 AC 447 ms
77,284 KB
testcase_10 AC 450 ms
77,404 KB
testcase_11 AC 495 ms
77,420 KB
testcase_12 AC 491 ms
77,216 KB
testcase_13 AC 192 ms
77,024 KB
testcase_14 AC 192 ms
77,132 KB
testcase_15 AC 429 ms
77,268 KB
testcase_16 AC 430 ms
77,476 KB
testcase_17 AC 79 ms
71,656 KB
testcase_18 AC 79 ms
71,336 KB
testcase_19 AC 78 ms
71,296 KB
testcase_20 AC 399 ms
76,972 KB
testcase_21 AC 79 ms
71,164 KB
testcase_22 AC 493 ms
77,100 KB
testcase_23 AC 78 ms
71,720 KB
testcase_24 AC 80 ms
71,352 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#!/usr/bin/ python3.8
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
from math import gcd
import itertools
MOD = 10**9 + 7


def to_coprime_case(D1, A1, D2, A2):
    """ x=A1 mod D1, x=A2 mod D2. iff x=A1' mod D1', x=A2' mod D2'"""
    D = gcd(D1, D2)
    if A1 % D != A2 % D:
        return None
    A = D2 // D
    D2 = A
    while True:
        g = gcd(D, A)
        if g == 1:
            break
        D //= g
        D2 *= g
    D1 //= gcd(D1, D2)
    A1 %= D1
    A2 %= D2
    return D1, A1 % D1, D2, A2 % D2


def extgcd(a, b):
    s = a
    sx = 1
    sy = 0
    t = b
    tx = 0
    ty = 1
    while t:
        q, r = divmod(s, t)
        s, sx, sy, t, tx, ty = t, tx, ty, r, sx - tx * q, sy - ty * q
    return sx, sy


def Garner(D, A, MOD):
    N = len(D)
    coefs = [0] * N
    for i in range(N):
        mod = D[i]
        prod = 1
        num = A[i]
        for j, x in enumerate(D[:i]):
            num -= coefs[j] * prod
            prod *= x
            prod %= mod
        x, _ = extgcd(prod, mod)
        coefs[i] = x * num % mod
    ret = 0
    prod = 1
    for c, mod in zip(coefs, D):
        ret += prod * c
        prod *= mod
        prod %= MOD
    return ret % MOD


N = int(readline())
m = map(int, read().split())
X, Y = zip(*zip(m, m))
X = list(X)
Y = list(Y)

for i, j in itertools.combinations(range(N), 2):
    ret = to_coprime_case(Y[i], X[i], Y[j], X[j])
    if ret is None:
        print(-1)
        exit()
    else:
        Y[i], X[i], Y[j], X[j] = ret


X = [(x - 1) % y for x, y in zip(X, Y)]
x = Garner(Y, X, MOD)
x += 1
print(x % MOD)
0