페이지를 불러오는 중…
해결한 사람
1
명
정답률
100.00
%
시간 제한
30000
ms
메모리 제한
1024
MB
Alice와 Bob은 Binary Search 게임을 하려고 한다. 게임은 한 줄로 늘어선 개의 칸으로 이루어진 보드에서 진행된다. 각 칸에는 이상 이하의 정수가 들어 있다. 또한 부터 까지 번호가 매겨진 장의 카드가 있다. 게임을 시작하기 전에 심판은 가능한 가지 방법 중 하나로 각 카드에 이상 이하의 정수를 하나씩 적는다. Alice와 Bob은 게임을 시작하기 전에 각 칸과 각 카드에 적힌 정수를 알고 있다.
게임은 Alice가 먼저 시작하여 번갈아 가며 진행한다. 턴은 총 번이며, 이는 Alice가 번, Bob이 번의 턴을 진행한다는 뜻이다. 자신의 턴에 플레이어는 남은 칸의 왼쪽 절반이나 오른쪽 절반 중 하나를 제거할 수 있다. 예를 들어, 숫자 이 들어 있는 보드를 생각해 보자. 첫 턴에 Alice는 한쪽 절반을 제거하여 또는 중 하나를 남겨야 한다. Alice가 왼쪽 절반을 제거하여 을 남기면, Bob은 을 남길지 을 남길지 선택해야 한다. Bob이 을 남긴다면, 게임의 마지막 턴에는 Alice가 과 중 하나를 선택하게 된다.
게임이 끝나면 유일하게 남은 칸의 숫자 을 확인한다. 게임의 점수는 번 카드에 적힌 정수이다. 위 예시에서 Alice가 마지막 턴에 을 제거하고 을 남긴다면, 게임의 점수는 심판이 번 카드에 적은 숫자가 된다.

Alice는 게임의 점수를 최대화하도록 최적으로 플레이하고, Bob은 점수를 최소화하도록 최적으로 플레이한다. 두 사람에게는 각 칸에 정수 이 들어 있는 고정된 보드가 주어진다. 공정성을 최대한 보장하기 위해 두 사람은 번의 게임을 하며, 심판은 매 게임마다 카드에 정수를 적는 서로 다른 방법을 선택한다. 즉, 카드에 정수를 적는 각각의 가능한 방법마다 Alice와 Bob이 정확히 한 번의 게임을 진행한다. 게임의 매개변수와 고정된 보드의 내용이 주어질 때, 이 모든 게임의 점수 합을 구하라. 출력값이 매우 클 수 있으므로, 결과를 소수 ()로 나눈 나머지만 출력한다.
시간 제한: 30초. 메모리 제한: 1 GB. . . 모든 에 대해 .
. .
. .
입력의 첫 줄에는 테스트 케이스의 수 가 주어진다. 이어서 개의 테스트 케이스가 주어진다. 각 테스트 케이스는 정확히 두 줄로 이루어진다. 각 테스트 케이스의 첫 줄에는 세 정수 , , 이 주어진다. 둘째 줄에는 개의 정수 가 주어지며, 은 보드의 왼쪽에서 번째 칸에 들어 있는 정수이다.
각 테스트 케이스마다 Case #$x$: $y$을 한 줄에 출력한다. 여기서 는 부터 시작하는 테스트 케이스 번호이고, 은 번의 모든 게임의 점수 합을 소수 ()로 나눈 나머지이다.
3
2 2 2
2 1 1 1
4 3 2
3 1 1 4
5 100 3
2 4 1 1 4 5 2 5
Case #1: 6
Case #2: 144
Case #3: 991661422
샘플 케이스 #1에서 빈 카드에 정수를 적는 방법은 , , , 의 가지이다. 처음 두 방법에서는 Alice가 첫 턴에 무엇을 선택하더라도 Bob은 마지막에 남는 칸의 숫자를 항상 로 만들 수 있고, 번 카드에는 이 들어 있으므로 이 두 게임의 점수는 이다. 마지막 두 방법에서는 Alice가 보드의 왼쪽 절반을 제거하는 것으로 시작하여 Bob에게 을 남길 수 있으며, Bob은 결국 을 남길 수밖에 없다. 이 방법들에서는 번 카드에 이 적혀 있으므로 두 게임의 점수는 모두 이다. 따라서 모든 점수의 합은 이다.
Copyright Google LLC; sourced from the Google Coding Competitions Archive.
로그인 상태를 확인하는 중입니다.