페이지를 불러오는 중…
해결한 사람
1
명
정답률
50.00
%
시간 제한
4000
ms
메모리 제한
2048
MB
Pak Dengklek은 마술을 선보이려고 한다. Pak Dengklek의 조수인 Pak Ganesh는 부터 까지 번호가 매겨진 장의 카드를 가지고 있다. 관객 한 명을 무대로 초대하여 이 카드들 중 서로 다른 장을 고른 뒤 Pak Ganesh에게 건네게 한다. Pak Ganesh는 카드를 확인한 다음 장의 카드 중 한 장을 버리고, 남은 장의 카드를 임의의 순서로 탁자 위에 놓는다. 그런 다음 Pak Dengklek은 탁자 위의 장의 카드를 보고 Pak Ganesh가 버린 카드를 알아낼 수 있어야 한다.
당연히 마술이 시작된 뒤에는 Pak Dengklek과 Pak Ganesh가 서로 의사소통해서는 안 되지만, 마술이 시작되기 전에 전략을 정할 수는 있다. 이들의 전략을 설계하여 도와야 한다. 이번에는 Pak Dengklek과 Pak Ganesh가 동일한 과 의 값으로 이 마술을 번 수행한다.
다음 프로시저를 구현해야 한다.
void init_assistant(int N, int K)
choose_cards가 호출되기 전에 정확히 한 번 호출된다.int[] choose_cards(int[] cards)
cards 배열에 존재해야 한다.void init_magician(int N, int K)
find_discarded_card가 호출되기 전에 정확히 한 번 호출된다.int find_discarded_card(int[] cards)
각 테스트 케이스는 하나의 과 상황으로 구성된다. 위 프로시저들을 호출하는 프로그램은 다음과 같이 정확히 두 번 실행된다.
프로그램의 첫 번째 실행에서는 다음과 같다.
init_assistant는 choose_cards가 호출되기 전에 정확히 한 번 호출된다.choose_cards는 정확히 번 호출된다. 각 호출에서 반환된 선택 카드들은 채점 시스템에 저장된다.프로그램의 두 번째 실행에서는 다음과 같다.
init_magician은 find_discarded_card가 호출되기 전에 정확히 한 번 호출된다.find_discarded_card는 정확히 번 호출된다. 각 호출에서는 마술 수행 중 하나가 임의로 선택되며, choose_cards가 반환한 카드들이 find_discarded_card의 입력으로 사용된다.특히 프로그램의 첫 번째 실행에서 정적 변수나 전역 변수에 저장한 어떠한 정보도 프로그램의 두 번째 실행에서는 사용할 수 없다.
다음 호출을 살펴보자.
init_assistant(5, 3)
모든 마술에서 사용할 카드는 장이며, 각 마술에서는 관객 한 명을 초대하여 서로 다른 카드 장을 고르게 한다.
Pak Ganesh의 초기화가 완료된 뒤 다음 호출을 살펴보자.
choose_cards([1, 2, 3])
이는 관객이 번호가 , , 인 카드를 골랐다는 뜻이다.
Pak Ganesh가 번 카드를 버리고 탁자 위에 번 카드를 번 카드보다 앞에 놓았다고 가정하면, choose_cards는 를 반환해야 한다.
가능한 또 다른 호출을 살펴보자.
choose_cards([1, 3, 4])
이는 관객이 번호가 , , 인 카드를 골랐다는 뜻이다.
Pak Ganesh가 번 카드를 버리고 탁자 위에 번 카드를 번 카드보다 앞에 놓았다고 가정하면, choose_cards는 를 반환해야 한다.
Pak Ganesh가 모든 마술 수행에 대해 탁자 위에 카드를 놓았다고 가정하고 다음 호출을 살펴보자.
init_magician(5, 3)
Pak Ganesh에게 주어진 것과 동일한 과 의 정보가 Pak Dengklek에게 주어진다.
Pak Dengklek의 초기화가 완료된 뒤 다음 호출을 살펴보자.
find_discarded_card([1, 4])
이는 Pak Dengklek이 탁자 위에서 번 카드와 번 카드를 이 순서대로 본다는 뜻이다.
이 카드들은 choose_cards([1, 3, 4])의 반환값과 같다.
그 마술 수행에서 Pak Ganesh가 번 카드를 버렸으므로 find_discarded_card는 을 반환해야 한다.
또 다른 호출을 살펴보자.
find_discarded_card([3, 2])
이는 Pak Dengklek이 탁자 위에서 번 카드와 번 카드를 이 순서대로 본다는 뜻이다.
이 카드들은 choose_cards([1, 2, 3])의 반환값과 같다.
그 마술 수행에서 Pak Ganesh가 번 카드를 버렸으므로 find_discarded_card는 을 반환해야 한다.
choose_cards의 각 호출에 대해 다음 조건이 성립한다.
find_discarded_card의 각 호출에 대해 다음 조건이 성립한다.
choose_cards가 반환한 개의 모든 반환값과 같으며, 그 순서는 무작위이다.샘플 그레이더는 다음 형식으로 입력을 읽는다.
입력과 동일한 순서로 각 마술 수행에 대해, 마술이 올바르게 수행되었다면 샘플 그레이더는 Accepted: chosen_cards = <chosen_cards>; discarded_card = <discarded_card>를 출력한다. 여기서 <chosen_cards>는 choose_cards가 반환한 카드들이고 <discarded_card>는 find_discarded_card가 반환한 카드이다.
각 마술 수행에 대해, 마술이 올바르게 수행되지 않았다면 샘플 그레이더는 Wrong Answer: <MSG>를 출력한다. 여기서 <MSG>는 다음 중 하나이다.
invalid number of chosen cards: chosen_cards가 반환한 카드의 수가 올바르지 않다.invalid chosen card number: chosen_cards가 반환한 카드 번호 중 하나라도 올바르지 않다.duplicated chosen cards: chosen_cards가 반환한 카드 중 번호가 같은 두 카드가 존재한다.wrong discarded card: find_discarded_card가 반환한 카드가 올바르지 않다.5 3 2
1 2 3
1 3 4
3
1
International Olympiad in Informatics (IOI) 2022, official task package; Korean translation by Reporch.
Reporch에서 한국어 번역, 수식 표기, 이미지 호스팅 및 형식을 수정했습니다.
로그인 상태를 확인하는 중입니다.