結果

問題 No.2119 一般化百五減算
ユーザー gew1fw
提出日時 2025-06-12 13:45:25
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,452 bytes
コンパイル時間 153 ms
コンパイル使用メモリ 82,656 KB
実行使用メモリ 106,708 KB
最終ジャッジ日時 2025-06-12 13:46:21
合計ジャッジ時間 4,782 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 20 TLE * 1 -- * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

import math

def modinv(a, mod):
    g, x, y = extended_gcd(a, mod)
    if g != 1:
        return None
    else:
        return x % mod

def extended_gcd(a, b):
    if b == 0:
        return (a, 1, 0)
    else:
        g, x, y = extended_gcd(b, a % b)
        return (g, y, x - (a // b) * y)

def main():
    import sys
    input = sys.stdin.read().split()
    ptr = 0
    N = int(input[ptr])
    ptr += 1
    M = int(input[ptr])
    ptr += 1
    congruences = []
    for _ in range(M):
        B = int(input[ptr])
        C = int(input[ptr + 1])
        ptr += 2
        congruences.append((B, C))
    
    current_a = 0
    current_m = 1
    
    for B, C in congruences:
        # Compute normalized C mod B
        c = (C % B + B) % B
        
        # Merge current_a mod current_m with c mod B
        g = math.gcd(current_m, B)
        if (c - current_a) % g != 0:
            print("NaN")
            return
        
        # Compute LCM
        lcm = current_m // g * B
        
        m_div = current_m // g
        B_div = B // g
        rhs = (c - current_a) // g
        
        inv = modinv(m_div, B_div)
        if inv is None:
            print("NaN")
            return
        
        k = (rhs * inv) % B_div
        new_a = current_a + k * current_m
        current_a = new_a % lcm
        current_m = lcm
    
    if current_a <= N:
        print(current_a)
    else:
        print("NaN")

if __name__ == "__main__":
    main()
0