結果
問題 |
No.2119 一般化百五減算
|
ユーザー |
![]() |
提出日時 | 2025-03-20 21:16:55 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,480 bytes |
コンパイル時間 | 149 ms |
コンパイル使用メモリ | 82,708 KB |
実行使用メモリ | 106,196 KB |
最終ジャッジ日時 | 2025-03-20 21:17:46 |
合計ジャッジ時間 | 4,590 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 20 TLE * 1 -- * 4 |
ソースコード
import math def extended_gcd(a, b): old_r, r = a, b old_s, s = 1, 0 old_t, t = 0, 1 while r != 0: quotient = old_r // r old_r, r = r, old_r - quotient * r old_s, s = s, old_s - quotient * s old_t, t = t, old_t - quotient * t return old_r, old_s, old_t def combine(current_rem, current_mod, new_c, new_b): g = math.gcd(current_mod, new_b) if (current_rem - new_c) % g != 0: return None lcm = current_mod // g * new_b a = (new_c - current_rem) // g m_div_g = current_mod // g b_div_g = new_b // g g_inv, inv, _ = extended_gcd(m_div_g, b_div_g) inv %= b_div_g k = (a * inv) % b_div_g new_rem = current_rem + k * current_mod new_rem %= lcm return (new_rem, lcm) def main(): import sys input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 M = int(input[ptr]) ptr += 1 conditions = [] for _ in range(M): b = int(input[ptr]) c = int(input[ptr + 1]) ptr += 2 conditions.append((b, c)) current_rem = 0 current_mod = 1 for b, c in conditions: new_b = b new_c = c % new_b res = combine(current_rem, current_mod, new_c, new_b) if res is None: print("NaN") return current_rem, current_mod = res if current_rem <= N: print(current_rem) else: print("NaN") if __name__ == '__main__': main()