結果

問題 No.187 中華風 (Hard)
ユーザー maspymaspy
提出日時 2020-03-31 02:38:43
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,589 bytes
コンパイル時間 745 ms
コンパイル使用メモリ 82,288 KB
実行使用メモリ 76,788 KB
最終ジャッジ日時 2024-06-23 12:44:49
合計ジャッジ時間 8,119 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 23 WA * 2
権限があれば一括ダウンロードができます

ソースコード

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


print(Garner(Y, X, MOD))
0