페이지를 불러오는 중…
해결한 사람
1
명
정답률
100.00
%
시간 제한
4000
ms
메모리 제한
2048
MB
로버트는 새로운 컴퓨터 게임을 설계하고 있다. 게임에는 한 명의 영웅, 명의 적, 개의 던전이 있다. 적들은 번부터 번까지 번호가 붙어 있다. 던전들은 번부터 번까지 번호가 붙어 있다. 적 ()는 던전 에 위치하며 그 힘은 이다. 던전 에는 적이 없다.
영웅은 최초에 던전 에서 힘 를 가지고 시작한다. 영웅이 던전 ()에 들어갈 때마다 적 와 대결하며, 대결의 결과로 다음 중 하나의 결과가 나온다.
주의: 는 보다 크거나 같거나 작은 경우가 모두 가능하다. 또, 는 보다 크거나 같거나 작은 경우가 모두 가능하다. 대결의 승부와 무관하게 적 는 제자리에 계속 존재하며, 힘 도 동일하게 유지된다.
영웅이 던전 에 들어가면 게임이 끝난다. 이 게임이 영웅의 시작 던전과 힘이 어떤 값이든, 유한한 개수의 대결 이후에 끝난다는 것을 증명할 수 있다.
로버트는 당신에게 번의 시뮬레이션을 돌려서 게임을 테스트해 달라고 한다. 각 시뮬레이션에 대해서 로버트는 영웅의 시작 던전 와 시작할 때의 힘 를 지정할 것이다. 당신이 해야 하는 일은 각 시뮬레이션에 대해서 게임이 끝날 때의 영웅의 힘을 계산하는 것이다.
다음 함수들을 구현해야 한다.
void init(int n, int[] s, int[] p, int[] w, int[] l)
n: 적의 개수.s, p, w, l: 길이 인 배열들 ().
simulate 호출이 이어진다.int64 simulate(int x, int z)
x는 최초로 영웅이 들어가는 던전의 번호이다.z는 최초에 영웅이 가지는 힘이다.다음 호출을 보자.
init(3, [2, 6, 9], [3, 1, 2], [2, 2, 3], [1, 0, 1])
위 그림이 이 호출의 상황을 보여 준다. 각 사각형은 하나의 던전에 해당한다. 던전 , , 에 대해서, 와 의 값들은 사각형 안에 표시되어 있다. 자주색 화살표는 영웅이 이겼을 때 따라가는 길을 보여 준다. 검은색 화살표는 영웅이 졌을 때 따라가는 길을 보여 준다.
그레이더가 다음을 호출했다고 하자.
simulate(0, 1)
게임은 아래와 같이 진행된다.
| 던전 | 승부 직전의 영웅의 힘 | 결과 |
|---|---|---|
| 0 | 1 | 패 |
| 1 | 4 | 패 |
| 0 | 5 | 승 |
| 2 | 7 | 패 |
| 1 | 9 | 승 |
| 2 | 15 | 승 |
| 3 | 24 | 끝 |
따라서 함수는 를 리턴해야 한다.
그레이더가 다음을 호출했다고 하자.
simulate(2, 3)
게임은 아래와 같이 진행된다.
| 던전 | 승부 직전의 영웅의 힘 | 결과 |
|---|---|---|
| 2 | 3 | 패 |
| 1 | 5 | 패 |
| 0 | 6 | 승 |
| 2 | 8 | 패 |
| 1 | 10 | 승 |
| 2 | 16 | 승 |
| 3 | 25 | 끝 |
따라서 함수는 를 리턴해야 한다.


line 1: n q line 2: s[0] s[1] … s[n - 1] line 3: p[0] p[1] … p[n - 1] line 4: w[0] w[1] … w[n - 1] line 5: l[0] l[1] … l[n - 1] line 6 + i (0 ≤ i ≤ q - 1): i번째 simulate 호출의 x z
샘플 그레이더의 출력 양식은 다음과 같다.
line 1 + i (0 ≤ i ≤ q - 1): i번째 simulate 호출의 리턴 값
3 2
2 6 9
3 1 2
2 2 3
1 0 1
0 1
2 3
24
25
샘플 그레이더의 입력 양식은 다음과 같다.
International Olympiad in Informatics (IOI) 2021, official task package and official Korean statement.
Reporch에서 한국어 번역, 수식 표기, 이미지 호스팅 및 형식을 수정했습니다.
로그인 상태를 확인하는 중입니다.