페이지를 불러오는 중…
해결한 사람
2
명
정답률
100.00
%
시간 제한
1000
ms
메모리 제한
2048
MB
왼쪽에서 오른쪽으로 뻗은 길이 미터의 도로가 있으며, 서로 다른 여러 위치에 개의 작은 라우터가 놓여 있다. 도로의 가장 왼쪽 지점을 원점이라고 정의한다. 라우터에는 왼쪽부터 오른쪽까지 부터 까지의 번호가 붙어 있으며, 라우터 는 원점에서 미터 떨어진 곳에 놓여 있다.
라우터 은 원점에 있으며, 각 라우터에서 원점까지의 거리를 미터 단위로 나타낸 값은 짝수인 정수임이 보장된다.
개 라우터 각각의 위치를 알아내고자 한다. 라우터는 매우 작아서 멀리서는 찾기 어렵기 때문에, 다음 절차를 사용하여 라우터를 찾기로 했다.
탐지기는 최대 번 사용할 수 있다. 모든 라우터의 위치를 찾는 전략을 고안하라.
다음 프로시저를 구현해야 한다.
int[] find_routers(int l, int n, int q)
위 프로시저에서는 다음 프로시저를 호출할 수 있다.
int use_detector(int x)
다음 호출을 생각해 보자.
find_routers(5, 2, 10)
길이 미터인 도로에 라우터가 개 있으며, use_detector를 최대 번 호출할 수 있다. 라우터가 원점으로부터 각각 미터와 미터 떨어진 곳에 놓여 있다고 하자.
find_routers 프로시저는 use_detector(3)을 호출할 수 있다. 위치 에 있는 라우터 이 탐지기에서 가장 가까우므로 이 호출은 을 반환한다.
그런 다음 find_routers 프로시저는 use_detector(2)를 호출할 수 있다. 라우터 과 이 모두 탐지기로부터 같은 거리만큼 떨어져 있고 라우터 의 번호가 더 작으므로 이 호출은 을 반환한다.
이 시점에는 라우터가 각각 위치 과 에 있다고 결론 내리기에 충분한 정보가 있다.
따라서 find_routers 프로시저는 [, ]를 반환해야 한다.
다음 호출을 생각해 보자.
find_routers(6, 3, 10)
길이 미터인 도로에 라우터가 개 있으며, use_detector를 최대 번 호출할 수 있다. 라우터가 원점으로부터 각각 미터, 미터, 미터 떨어진 곳에 놓여 있다고 하자.
find_routers 프로시저는 use_detector(5)를 호출할 수 있다. 라우터 가 위치 에 있어 탐지기에서 가장 가까우므로 이 호출은 를 반환한다.
그런 다음 find_routers 프로시저는 use_detector(4)를 호출할 수 있다. 라우터 과 가 탐지기로부터 같은 거리만큼 떨어져 있으므로 이 호출은 을 반환한다.
이 시점에는 라우터가 각각 위치 , , 에 있다고 결론 내리기에 충분한 정보가 있다.
따라서 find_routers 프로시저는 [, , ]을 반환해야 한다.
또한 서브태스크 4는 부분 점수 서브태스크이다. 모든 테스트 케이스에서 호출한 use_detector의 횟수 중 최댓값을 이라고 하자.
샘플 그레이더는 다음 형식으로 답을 출력한다.
find_routers가 보고한 use_detector의 호출 횟수.5 2 10
0 4
0 4
2
6 3 10
0 2 6
0 2 6
2
샘플 그레이더는 다음 형식으로 입력을 읽는다.
International Olympiad in Informatics (IOI) 2021, official task package; Korean translation by Reporch.
Reporch에서 한국어 번역, 수식 표기, 이미지 호스팅 및 형식을 수정했습니다.
로그인 상태를 확인하는 중입니다.