結果
| 問題 | No.1568 Sushi |
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 20:56:23 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,786 bytes |
| コンパイル時間 | 157 ms |
| コンパイル使用メモリ | 82,612 KB |
| 実行使用メモリ | 159,816 KB |
| 最終ジャッジ日時 | 2025-03-20 20:56:53 |
| 合計ジャッジ時間 | 24,009 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | WA * 25 |
ソースコード
import bisect
def main():
import sys
input = sys.stdin.read().split()
idx = 0
L = int(input[idx]); idx +=1
N = int(input[idx]); idx +=1
Q = int(input[idx]); idx +=1
A = list(map(int, input[idx:idx+N]))
idx +=N
queries = []
for _ in range(Q):
B = int(input[idx])
C = int(input[idx+1])
idx +=2
queries.append((B, C))
D_prev = 0
for i in range(Q):
B, C = queries[i]
if i == 0:
x = B % L
t = C
else:
x = (B + D_prev) % L
t = (C + D_prev) % (10**15)
s_candidates = [t]
m = bisect.bisect_left(A, t)
for k in range(2):
if m + k < N:
s_candidates.append(A[m + k])
s_candidates = sorted(list(set(s_candidates)))
min_arrival = float('inf')
for s in s_candidates:
if s < t:
continue
pos_m = bisect.bisect_right(A, s) -1
num_revs = pos_m +1
direction = num_revs %2
sign = 1 if direction ==0 else -1
disp_required = x % L
current_disp = 0
phase_index = pos_m +1
total_T =0
dir_sign = sign
current_phase_start = s
found = False
phases_checked =0
while phases_checked <4:
if phase_index < N:
phase_end = A[phase_index]
else:
phase_end = float('inf')
phase_duration = phase_end - current_phase_start
if dir_sign ==1:
req = disp_required
else:
req = (L - disp_required) % L
T_candidate = req
if T_candidate <= phase_duration:
arrival_time = current_phase_start + T_candidate
min_arrival = min(min_arrival, arrival_time)
found = True
break
else:
total_T += phase_duration
disp_required = (disp_required - dir_sign * phase_duration) % L
dir_sign *= -1
current_phase_start = phase_end if phase_index < N else float('inf')
phase_index +=1
phases_checked +=1
if not found:
if phase_index >=N:
T_candidate = req
arrival_time = current_phase_start + T_candidate
min_arrival = min(min_arrival, arrival_time)
D = min_arrival - t
D_prev = D
print(D)
if __name__ == '__main__':
main()
lam6er