페이지를 불러오는 중…
해결한 사람
1
명
정답률
50.00
%
시간 제한
1000
ms
메모리 제한
2048
MB
Nayra는 볼리비아의 유명한 호수인 라구나 콜로라다 여행권이 걸린 게임 축제에 참가 중이다. 이 게임은 토큰을 이용하여 쿠폰을 사는 것이다. 쿠폰을 사는 것은 추가적인 토큰을 얻을 수 있다. 목표는 가능한 많은 쿠폰을 갖는 것이다.
그녀는 개의 토큰을 갖고 게임을 시작한다. 쿠폰은 가지가 있고 부터 까지로 구분된다. Nayra는 쿠폰 ()를 사기 위해 토큰 개를 지불해야 한다(그리고 구매 전에 최소한 개의 토큰을 갖고 있어야 한다). 그녀는 각 쿠폰을 최대 한 번만 살 수 있다.
게다가, 각 쿠폰 ()는 몇 가지 종류 중 하나인데, 이 종류는 로 표시되며 부터 까지 정수 중 하나이다. Nayra가 쿠폰 를 산 후, 그녀가 가진 남은 토큰의 개수는 와 곱해진다. 정확히 표현하면, 게임 중 어떤 순간에 그녀가 토큰 개를 갖고 있고 (를 만족하는) 쿠폰 를 산다면, 구매 후 그녀는 토큰 개를 갖게 된다.
당신이 할 일은 게임이 끝났을 때 Nayra가 갖는 쿠폰 개수가 최대가 되도록 어떤 쿠폰을 어떤 순서로 사야하는지 결정하는 것이다. 만약 이런 구매 순서가 여러개 존재한다면, 당신은 그 중 한가지만 구하면 된다.
다음 함수를 구현해야 한다.
std::vector<int> max_coupons(int A, std::vector<int> P,
std::vector<int> T)
이 함수는 다음과 같이 Nayra의 구매 정보를 나타내는 배열 을 리턴해야 한다:
만약 아무 쿠폰도 살 수 없다면, 은 빈 배열이어야 한다.
| Subtask | Score | Additional Constraints |
|---|---|---|
| 1 | (인 각 에 대해). | |
| 2 | ; (인 각 에 대해). | |
| 3 | (인 각 에 대해). | |
| 4 | ||
| 5 | Nayra는 (어떤 순서로) 모든 가지 쿠폰을 살 수 있다. | |
| 6 | (인 각 에 대해). | |
| 7 | 추가적인 제한이 없다. |
다음 호출을 생각해보자.
max_coupons(13, [4, 500, 8, 14], [1, 3, 3, 4])
Nayra는 처음에 토큰 개를 갖고 있다. 그녀는 아래와 같은 순서로 개의 쿠폰을 살 수 있다:
| 산 쿠폰 | 쿠폰 가격 | 쿠폰 종류 | 구매 후 토큰 개수 |
|---|---|---|---|
이 예에서, Nayra가 개의 쿠폰보다 더 많이 사는 것은 불가능하며, 위에 나타낸 구매 순서가 이들 개를 살 수 있는 유일한 방법이다. 따라서, 함수는 을 리턴해야 한다.
다음 호출을 생각해보자.
max_coupons(9, [6, 5], [2, 3])
이 예에서, Nayra를 두 쿠폰을 어떤 순서로든 살 수 있다. 따라서, 함수는 또는 을 리턴해야 한다.
다음 호출을 생각해보자.
max_coupons(1, [2, 5, 7], [4, 3, 1])
이 예에서, Nayra는 토큰 한 개를 갖고 있고 이걸로는 어떤 쿠폰도 살 수 없다. 따라서, 함수는 (빈 배열)을 리턴해야 한다.
N A
P[0] T[0]
P[1] T[1]
...
P[N-1] T[N-1]
S
R[0] R[1] ... R[S-1]
여기에서, 는 max_coupons가 리턴하는 배열 의 길이이다.
4 13
4 1
500 3
8 3
14 4
3
2 3 0
2 9
6 2
5 3
2
0 1
3 1
2 4
5 3
7 1
0
International Olympiad in Informatics (IOI) 2025, official task package and official Korean translation.
Reporch에서 한국어 번역, 수식 표기, 이미지 호스팅 및 형식을 수정했습니다.
로그인 상태를 확인하는 중입니다.