結果

問題 No.187 中華風 (Hard)
ユーザー maspymaspy
提出日時 2020-03-31 02:41:08
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 441 ms / 3,000 ms
コード長 1,648 bytes
コンパイル時間 450 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 76,800 KB
最終ジャッジ日時 2024-06-23 12:48:37
合計ジャッジ時間 8,227 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 42 ms
53,120 KB
testcase_01 AC 47 ms
53,120 KB
testcase_02 AC 387 ms
75,776 KB
testcase_03 AC 377 ms
76,416 KB
testcase_04 AC 426 ms
76,240 KB
testcase_05 AC 437 ms
76,544 KB
testcase_06 AC 441 ms
76,544 KB
testcase_07 AC 436 ms
76,416 KB
testcase_08 AC 404 ms
75,904 KB
testcase_09 AC 403 ms
76,800 KB
testcase_10 AC 409 ms
76,288 KB
testcase_11 AC 441 ms
76,544 KB
testcase_12 AC 438 ms
76,288 KB
testcase_13 AC 164 ms
75,648 KB
testcase_14 AC 165 ms
76,288 KB
testcase_15 AC 390 ms
76,288 KB
testcase_16 AC 379 ms
76,416 KB
testcase_17 AC 40 ms
52,480 KB
testcase_18 AC 41 ms
52,992 KB
testcase_19 AC 40 ms
52,224 KB
testcase_20 AC 346 ms
76,416 KB
testcase_21 AC 40 ms
52,608 KB
testcase_22 AC 439 ms
76,672 KB
testcase_23 AC 41 ms
52,736 KB
testcase_24 AC 41 ms
52,096 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