結果

問題 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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 39 ms
54,132 KB
testcase_01 AC 39 ms
53,988 KB
testcase_02 AC 367 ms
76,548 KB
testcase_03 AC 357 ms
76,192 KB
testcase_04 AC 427 ms
76,352 KB
testcase_05 AC 427 ms
76,300 KB
testcase_06 AC 424 ms
76,372 KB
testcase_07 AC 425 ms
76,464 KB
testcase_08 AC 388 ms
76,256 KB
testcase_09 AC 389 ms
76,464 KB
testcase_10 AC 389 ms
76,320 KB
testcase_11 AC 427 ms
76,316 KB
testcase_12 AC 426 ms
76,580 KB
testcase_13 AC 153 ms
76,112 KB
testcase_14 AC 156 ms
76,056 KB
testcase_15 WA -
testcase_16 WA -
testcase_17 AC 38 ms
53,568 KB
testcase_18 AC 39 ms
54,096 KB
testcase_19 AC 37 ms
52,776 KB
testcase_20 AC 337 ms
76,736 KB
testcase_21 AC 36 ms
53,568 KB
testcase_22 AC 424 ms
76,308 KB
testcase_23 AC 37 ms
53,196 KB
testcase_24 AC 39 ms
52,880 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


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