結果
問題 | No.2259 Gas Station |
ユーザー |
![]() |
提出日時 | 2025-03-20 20:42:28 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 47 ms / 2,000 ms |
コード長 | 1,685 bytes |
コンパイル時間 | 168 ms |
コンパイル使用メモリ | 82,240 KB |
実行使用メモリ | 61,076 KB |
最終ジャッジ日時 | 2025-03-20 20:42:38 |
合計ジャッジ時間 | 2,163 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
import math def find_min_change(L, R, C): # Step 1: Check if there is any x in [L, R] such that Cx is divisible by 1000 d = math.gcd(C, 1000) step = 1000 // d first_multiple = ((L + step - 1) // step) * step if first_multiple <= R: return 0 # Step 2: Find the maximum (Cx mod 1000) for x in [L, R] A = C % 1000 if A == 0: # Already handled by step 1 return 0 d_gcd = math.gcd(A, 1000) m = 1000 max_mod = -1 max_i = (1000 // d_gcd) - 1 # since k = m - d_gcd*i should be positive for i in range(1, max_i + 1): k = m - d_gcd * i a = A // d_gcd m_div_d = m // d_gcd k_div_d = k // d_gcd # Solve a * x ≡ k_div_d mod m_div_d try: inv_a = pow(a, -1, m_div_d) except ValueError: # This should not happen as a and m_div_d are coprime continue s = (k_div_d * inv_a) % m_div_d s_mod = s % m_div_d # Calculate t_min and t_max t_min = (L - s_mod + m_div_d - 1) // m_div_d t_max = (R - s_mod) // m_div_d if t_min <= t_max and t_max >= 0: max_mod = k break if max_mod == -1: # Fallback to check all x in [L, R], but ideally should not reach here max_mod_val = 0 for x in [L, R]: mod = (x * C) % 1000 if mod != 0: mod = 1000 - mod if mod > max_mod_val: max_mod_val = mod return 1000 - max_mod_val if max_mod_val != 0 else 0 else: return 1000 - max_mod # Read input L, R, C = map(int, input().split()) print(find_min_change(L, R, C))