結果
| 問題 | No.3513 Greedy Yokan Party |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-07-05 02:00:44 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 1,788 ms / 2,000 ms |
| コード長 | 658 bytes |
| 記録 | |
| コンパイル時間 | 224 ms |
| コンパイル使用メモリ | 95,980 KB |
| 実行使用メモリ | 343,052 KB |
| 最終ジャッジ日時 | 2026-07-05 02:01:29 |
| 合計ジャッジ時間 | 42,748 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 26 |
ソースコード
N,L = map(int,input().split())
K = int(input())
A = [0]+list(map(int,input().split()))+[L]
N+=2
def check(X): # X以上のyokanを2個以上作れるか?
r = 0
p = [-1]*N
for l in range(N):
while r < N and A[r]-A[l]<X:
r += 1
p[l] = r
dp = [[-float("inf")]*3 for i in range(N)]
dp[0][0] = 0
for i in range(N-1):
for k in range(3):
dp[i+1][k] = max(dp[i+1][k], dp[i][k]+1)
if k != 2 and p[i] != N:
dp[p[i]][k+1] = max(dp[p[i]][k+1], dp[i][k]+1)
return (dp[N-1][2] >= K+1)
ok = 1
ng = L
while ng - ok > 1:
mid = (ok+ng)//2
if check(mid):
ok = mid
else:
ng = mid
print(ok)