DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

Imp 2

返回题目

题解

1. 전략을 순서로 표현하기

당신이 상자를 샀는데 임프가 주문을 쓰지 않으면 게임은 즉시 끝난다. 따라서 게임이 계속되는 경우는 방금 산 아이템이 사라진 경우뿐이다. 즉, 당신의 전략은 서로 다른 상자들의 순서

p1,p2,…p_1,p_2,\ldotsp1​,p2​,…

로 나타낼 수 있다.

양의 정수 xxx 이상의 이익을 반드시 얻고 싶다고 하자. 임프는 처음 kkk개의 아이템을 모두 없앨 수 있으므로, 아이템을 얻어 이익 xxx 이상을 보장하려면 적어도 k+1k+1k+1개의 상자를 살 계획이 필요하다. 반대로 k+1k+1k+1개의 상자를 계획하면 임프는 그중 하나를 반드시 남겨야 한다.

pip_ipi​번 상자에서 처음으로 아이템을 얻는 경우 지금까지 지불한 금액은

∑j=1icpj\sum_{j=1}^{i} c_{p_j}j=1∑i​cpj​​

이고 이익은

vpi−∑j=1icpjv_{p_i}-\sum_{j=1}^{i} c_{p_j}vpi​​−j=1∑

이다. 따라서 이익 xxx 이상을 보장할 수 있는 필요충분조건은 서로 다른 k+1k+1k+1개의 상자를 어떤 순서로 배치하여 모든 1≤i≤k+11 \le i \le k+11≤i≤k+1에 대해

∑j=1icpj≤vpi−x\sum_{j=1}^{i} c_{p_j} \le v_{p_i}-xj=1∑i​cpj​

를 만족시키는 것이다.

이익 000은 처음부터 빈손으로 떠나면 항상 얻을 수 있으므로, 최종 답은 음수가 아니다.

2. 스케줄링 문제로 바꾸기

목표 이익 xxx를 고정한다. 각 상자를 다음 작업으로 생각하자.

  • 처리 시간: cic_ici​
  • 마감 시간: vi−xv_i-xvi​−x

앞의 부등식은 선택한 작업들을 어떤 순서로 실행했을 때 모든 작업이 자신의 마감 시간 이내에 끝난다는 뜻과 같다. 따라서 목표 이익 xxx가 가능한지는 마감 시간을 지키며 완료할 수 있는 작업이 k+1k+1k+1개 이상인지로 판정할 수 있다.

3. 완료 가능한 작업 수의 최댓값

작업을 마감 시간 오름차순으로 본다. 현재까지 선택한 작업들의 처리 시간 합을 SSS라 하고, 선택한 처리 시간들을 최대 힙에 넣는다.

새 작업을 선택한 뒤 SSS가 현재 마감 시간을 초과하면, 선택한 작업 중 처리 시간이 가장 긴 작업 하나를 제거한다. 같은 개수의 작업을 남겨야 할 때 가장 긴 작업을 제거하는 것이 처리 시간 합을 가장 작게 만들기 때문이다.

각 단계가 끝난 뒤 힙에는 지금까지 본 작업들 중 마감 시간을 지키며 완료할 수 있는 최대 개수의 작업이 들어 있다. 또한 그 최대 개수를 만드는 선택 중 처리 시간 합이 최소이다. 이 불변식은 새 작업을 추가한 뒤 마감 시간을 넘지 않는 경우에는 그대로 유지되고, 넘는 경우에는 가장 긴 작업을 제거함으로써 유지된다.

모든 작업을 처리한 뒤 힙의 크기가 k+1k+1k+1 이상이면 목표 이익 xxx가 가능하다.

마감 시간은 vi−xv_i-xvi​−x이므로 xxx가 달라져도 작업의 정렬 순서는 viv_ivi​의 오름차순으로 동일하다. 각 테스트 케이스에서 한 번만 정렬하면 된다.

4. 파라메트릭 서치

어떤 이익 xxx를 보장할 수 있다면 그보다 작은 이익도 보장할 수 있다. 따라서 가능 여부는 단조적이다.

비용은 음수가 아니므로 답은 어떤 아이템의 가치보다 클 수 없고, 모든 viv_ivi​가 1 000 0001\ 000\ 0001 000 000 이하이므로 답의 범위는 000 이상 1 000 0001\ 000\ 0001 000 000 이하이다. 이 범위에서 이분 탐색한다.

각 가능 여부 판정은 최대 힙을 사용하여 O(nlog⁡n)O(n\log n)O(nlogn)이고, 이분 탐색은 O(log⁡1 000 001)O(\log 1\ 000\ 001)O(log1 000 001)번 수행된다. 전체 시간 복잡도는

O(nlog⁡nlog⁡1 000 001)O(n\log n\log 1\ 000\ 001)O(nlognlog1 000 001)

이고, 공간 복잡도는 O(n)O(n)O(n)이다. 여러 테스트 케이스에서는 nnn의 합에 대해 같은 복잡도 분석이 적용된다.

Solution written by GPT5.6

i
​
cpj​​
​
≤
vpi​​−
x