QOJ.ac

QOJ

時間限制: 1.0 s 記憶體限制: 1024 MB 總分: 100 可 Hack ✓

#18608. 화성 배낭

统计

화성인 마빈은 배낭을 꾸리는 중이다. 그 앞에는 $1$부터 $n$까지 번호가 매겨진 $n$개의 물건이 있다. 각 물건은 두 가지 특성을 가진다: $i$번째 물건은 이상함 $w_i$와 비용 $c_i$를 갖는다. 물건의 이상함은 이진 표현이 최대 $k$비트를 포함하는 음이 아닌 정수($0 \le w_i < 2^k$)이고, 물건의 비용은 $10^9$를 넘지 않는 음이 아닌 정수($0 \le c_i \le 10^9$)이다.

물건 집합의 총 비용은 그 집합에 포함된 물건들의 비용의 합이고, 이 집합의 총 이상함은 그 집합에 포함된 물건들의 이상함의 비트 OR로 정의된다.

마빈은 총 비용이 $C$ 이상인 물건 집합을 가치 있는 집합이라고 부른다. $i = 1$부터 $n$까지 각 $i$에 대해, 마빈은 인덱스가 $i$를 초과하지 않는 물건들 중에서 가치 있는 집합을 고르되, 그 총 이상함이 가능한 한 작도록 하고 싶다.

정수 집합의 비트 OR는 다음과 같이 정의된다: 이 수들의 이진 표현을 생각하자. 그러면 결과의 $i$번째 비트는 집합에 있는 수들 중 적어도 하나의 $i$번째 비트가 $1$이면 $1$이 된다. 프로그래밍 언어에서 이 연산은 "|" 기호로 나타낸다. 예를 들어, $(10 \mid 3 \mid 9) = (1010_2 \mid 0011_2 \mid 1001_2) = 1011_2 = 11$이다.

입력

첫 번째 줄에는 세 개의 정수 $n$, $k$, $C$가 주어진다 ($1 \le n \le 2\,000\,000$, $1 \le k \le 22$, $1 \le C \le 10^{15}$) — 물건의 개수, 이상함의 이진 표현 비트 수의 제한, 가치 있는 부분집합의 최소 비용이다.

다음 $n$개의 각 줄에는 두 개의 정수 $w_i$와 $c_i$가 주어진다 ($0 \le w_i < 2^k$, $0 \le c_i \le 10^9$) — 각각 해당 물건의 이상함과 비용이다.

출력

$n$개의 정수를 출력한다. $i$번째 정수는 처음 $i$개의 물건 중 가치 있는 부분집합의 최소 총 이상함과 같아야 한다. 가치 있는 부분집합을 고를 수 없다면 $-1$을 출력한다.

서브태스크

서브태스크 점수 $n$ $k$ 추가 제약 조건 필요한 서브태스크
1 10 $n \le 20$ $k \le 10$ 예제
2 11 $n \le 100$ $k \le 10$ 예제, 1
3 14 $n \le 50\,000$ $k \le 10$ 예제, 1–2
4 13 $n \le 1\,000\,000$ $k \le 19$ 모든 $w_i$는 2의 거듭제곱
5 11 $n \le 2\,000$ 예제, 1–2
6 18 $n \le 500\,000$ $k \le 16$ 예제, 1–3
7 6 $n \le 1\,000\,000$ $k \le 19$ 예제, 1–4, 6
8 6 $k \le 19$ 예제, 1–4, 6–7
9 11 예제, 1–8

예제

입력 1

5 4 12
8 7
2 6
3 6
1 12
3 5

출력 1

-1
10
3
1
1

참고

$i = 1$인 경우, 이상함이 $8$이고 비용이 $7$인 물건이 하나 있다. 단일 물건의 부분집합을 고르는 방식으로 비용의 합을 $12$ 이상으로 만들 수 없으므로 답은 $-1$이다.

$i = 2$인 경우, 두 개의 물건이 있고, 가치 있는 부분집합을 고르는 유일한 방법은 두 물건을 모두 고르는 것이다. 총 이상함은 $8 \mid 2 = 10$이 된다.

$i = 3$인 경우, 두 개 이상의 물건으로 이루어진 임의의 부분집합이 가치 있을 것이다. 최적의 선택은 두 번째와 세 번째 물건을 고르는 것이며, 이들의 총 이상함은 $2 \mid 3 = 3$이다.

$i = 4$인 경우, 비용이 충분한 네 번째 물건만 고르는 것이 가능해지며, 그 이상함은 $1$로 가능한 최솟값이다. $i = 5$인 경우에도 네 번째 물건만 고르는 것이 최적이다.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.