結果
| 問題 | No.3513 Greedy Yokan Party |
| コンテスト | |
| ユーザー |
2251799813685248
|
| 提出日時 | 2026-07-23 19:54:27 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,058 bytes |
| 記録 | |
| コンパイル時間 | 766 ms |
| コンパイル使用メモリ | 96,100 KB |
| 実行使用メモリ | 274,764 KB |
| 最終ジャッジ日時 | 2026-07-23 19:55:31 |
| 合計ジャッジ時間 | 49,605 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 18 TLE * 8 |
ソースコード
import bisect
N,L = map(int, input().split())
K = int(input())
a = [0]+list(map(int, input().split())) + [L]
##長さx以上の区間を2つ以上とるとき、最高でいくつの区間をとれるか
def check(x):
#dp[j][i]...長さx以上の区間をj個以上取っていることを保証し、今i番目の切れ目に着目しているときに最大でこれまで何個の区間をとれたか?
dp = [[-1 for i in range(N+2)] for j in range(4)]
dp[0][0] = 0
for j in range(3):
for i in range(N+1):
if dp[j][i] == -1:
continue
#すぐ次の区間をとる
dp[j][i+1] = max(dp[j][i+1], dp[j][i]+1)
#x以上になるまで区間を飛ばす
idx = bisect.bisect_left(a, a[i]+x)
if idx >= len(a):
continue
dp[j+1][idx] = max(dp[j+1][idx], dp[j][i]+1)
# print(dp)
return dp[2][N+1] >= K+1
ng = 1
ok = L+1
while ok-ng > 1:
mid = (ok+ng)//2
if check(mid):
ng = mid
else:
ok = mid
print(ng)
# # for i in range(1,L+2):
# # print(check(i))
# print(check(5))
2251799813685248