페이지를 불러오는 중…
해결한 사람
1
명
정답률
33.33
%
시간 제한
1000
ms
메모리 제한
1024
MB
로봇 하나가 격자로 모델링된 필드 위에 놓여 있다. 이 격자의 일부 칸은 벽이다.
로봇은 가지 종류의 명령을 받는다: up, down, left, right.
로봇이 현재 좌표 에 있다고 하자. 각 명령을 실행했을 때의 효과는 다음과 같다.
up: 이거나 가 벽이면 로봇은 움직이지 않는다. 그렇지 않으면 로봇은 로 이동한다.down: 이거나 가 벽이면 로봇은 움직이지 않는다. 그렇지 않으면 로봇은 로 이동한다.left: 이거나 이 벽이면 로봇은 움직이지 않는다. 그렇지 않으면 로봇은 로 이동한다.right: 이거나 이 벽이면 로봇은 움직이지 않는다. 그렇지 않으면 로봇은 로 이동한다.로봇의 시작 위치는 또는 중 하나라는 것을 알고 있다. 로봇이 와 중 어느 곳에서 시작하더라도 항상 에서 끝나게 하는, 최대 개의 명령으로 이루어진 순서를 찾아라. 문제의 제약 조건을 만족하는 모든 입력에 대해 해가 존재함을 증명할 수 있다.
다음 프로시저를 구현해야 한다.
void construct_instructions(bool[][] g, int q, int a, int b, int c, int d)
이 프로시저는 명령 순서를 구성하기 위해 다음 프로시저 중 하나 이상을 호출해야 한다.
void up() void down() void left() void right()
마지막 명령을 추가한 뒤 construct_instructions는 반환해야 한다.
다음 호출을 생각해 보자.
construct_instructions([[0,0],[0,1]], 700, 1, 0, 0, 1)
격자에는 에 벽이 하나 있다.
로봇이 에서 시작한다면, up()을 실행한 다음 left()를 실행했을 때 다음과 같은 일이 일어난다.
| 실행한 동작 | 새 위치 | 설명 |
|---|---|---|
up() | 은 벽이 아니다 | |
left() | 이므로 로봇은 왼쪽으로 움직이지 않는다 |
마찬가지로 로봇이 에서 시작한다면, up()을 실행한 뒤에도 에 머물고 left()를 실행한 뒤 으로 이동한다.
이 구성을 출력하려면 프로그램은 반환하기 전에 up()을 호출한 다음 left()를 호출해야 한다.
샘플 그레이더는 다음 형식으로 입력을 읽는다.
샘플 그레이더는 다음 형식으로 출력을 인쇄한다.
up(), down(), left(), right()를 호출할 때마다 그레이더는 각각 단일 문자 U, D, L, R을 인쇄한다.2 2 700 1 0 0 1
0 0
0 1
2
UL
International Olympiad in Informatics (IOI) 2021, official task package; Korean translation by Reporch.
Reporch에서 한국어 번역, 수식 표기, 이미지 호스팅 및 형식을 수정했습니다.
로그인 상태를 확인하는 중입니다.