結果
| 問題 | No.1715 Dinner 2 | 
| コンテスト | |
| ユーザー | 👑  SPD_9X2 | 
| 提出日時 | 2021-10-22 22:06:12 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 988 bytes | 
| コンパイル時間 | 227 ms | 
| コンパイル使用メモリ | 81,856 KB | 
| 実行使用メモリ | 76,432 KB | 
| 最終ジャッジ日時 | 2024-09-23 05:37:00 | 
| 合計ジャッジ時間 | 4,951 ms | 
| ジャッジサーバーID (参考情報) | judge3 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 1 | 
| other | AC * 35 WA * 3 | 
ソースコード
"""
同じ2種類のみを繰り返すのが最適?
最後の方は、そうとは限らない
二分探索か?
最低を下回らない範囲内で、一番跳ね返りが大きいのを選ぶのが最適
"""
import sys
from sys import stdin
import math
N,D = map(int,stdin.readline().split())
PQ = []
PG = []
for i in range(N):
    P,Q = map(int,stdin.readline().split())
    PQ.append((P,Q))
    PG.append( (P,Q-P) )
PG.sort()
r = 0
l = -10**9
while r-l != 1:
    m = (l+r)//2
    now = 0
    last = None
    able = True
    for day in range(D):
        nind = None
    
        for i in range(N):
            p,g = PG[i]
            if now - p >= m and i != last and (nind == None or PG[nind][1] < g):
                nind = i
            if now - p < m:
                break
        if nind == None:
            able = False
            break
        last = nind
        now += PG[nind][1]
    if able:
        l = m
    else:
        r = m
print (l)
        
            
            
            
        