結果
| 問題 |
No.2259 Gas Station
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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))
lam6er