結果
| 問題 | No.3513 Greedy Yokan Party |
| コンテスト | |
| ユーザー |
yt142857
|
| 提出日時 | 2026-04-14 23:00:15 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 1,781 ms / 2,000 ms |
| コード長 | 750 bytes |
| 記録 | |
| コンパイル時間 | 290 ms |
| コンパイル使用メモリ | 84,864 KB |
| 実行使用メモリ | 189,896 KB |
| 最終ジャッジ日時 | 2026-04-24 20:52:07 |
| 合計ジャッジ時間 | 36,343 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 26 |
ソースコード
import bisect
n,m = map(int,input().split())
k = int(input())
A = [int(_) for _ in input().split()]
A = [0] + A + [m]
def check(num):
S = [10**18] * (n+1)
for i in range(n+1):
left = i
right = bisect.bisect_left(A,A[left] + num)
if right == n+2:
S[left] = 10**18
continue
S[left] = right - left
min_S = [10**18] * (n+1)
min_S[-1] = S[-1]
for i in range(n):
min_S[-(i+2)] = min(min_S[-(i+1)],S[-(i+2)])
for i in range(n):
if S[i] == 10**18 or i+S[i] == n+1:
continue
if (n + 1) - ( S[i] + min_S[i + S[i]] ) >= k - 1:
return True
return False
left = 0
right = 10**10
while left + 1 != right:
mid = (left+right) // 2
if check(mid):
left = mid
else:
right = mid
print(left)
yt142857