QOJ.ac

QOJ

時間限制: 1 s 記憶體限制: 1024 MB 總分: 100

#1166. PCB 설계하기

统计

동규는 단면 인쇄 회로 기판(PCB)을 설계하려고 한다. PCB는 부품을 장착할 수 있는 패드와 패드를 연결하는 전도성 트랙으로 구성된다. PCB를 무한한 2차원 평면으로, 패드를 평면 위의 점으로, 트랙을 평면 위의 연결된 폴리라인(polyline)으로 생각할 수 있다.

동규가 설계하려는 회로에서 $2n$개의 패드는 수평으로 배열되어 있다. 왼쪽에서 $i$번째 패드는 좌표 $(i - 1, 0)$에 위치한다. 각 패드에는 $1$ 이상 $n$ 이하의 정수인 라벨이 할당되어 있다. $1 \le i \le n$인 각 $i$에 대해, 라벨이 $i$인 패드는 정확히 2개 존재한다.

동규는 같은 라벨을 가진 패드 쌍을 연결하기 위해 $n$개의 트랙을 그려야 한다. 각 트랙은 양의 정수 길이를 가진 선분들로 구성된 폴리라인이어야 하며, 각 선분은 좌표축 중 하나와 평행해야 한다. 트랙은 패드를 나타내는 점에서 시작하고 끝난다. 두 트랙은 공통점을 공유할 수 없다.

패드의 개수와 라벨링이 주어질 때, 회로를 설계하는 프로그램을 작성하시오.

입력

첫 번째 줄에는 정수 $n$ ($1 \le n \le 1000$)이 주어진다. 두 번째 줄에는 $2n$개의 정수 $p_i$ ($1 \le p_i \le n$)가 주어진다. 여기서 $p_i$는 왼쪽에서 $i$번째 패드의 라벨이다. $1$부터 $n$까지의 각 정수가 라벨에 정확히 두 번 등장함이 보장된다.

출력

문제에 기술된 제약 조건을 만족하는 회로를 설계하는 것이 불가능하다면 "NO"를 출력한다. 그렇지 않다면, 첫 번째 줄에 "YES"를 출력한다. 그 다음 $n$개의 줄에 걸쳐, 연결하는 패드의 라벨 번호가 증가하는 순서대로 $n$개 트랙의 설명을 출력한다.

각 트랙은 연결된 두 패드 중 왼쪽 패드에서 시작하는 폴리라인이어야 한다. 트랙의 설명은 트랙을 구성하는 선분의 개수를 나타내는 정수 $L_i$ ($1 \le L_i \le 10$)로 시작한다. 각 선분은 방향을 나타내는 문자 하나와 선분 길이를 나타내는 양의 정수로 설명된다. 방향은 'D' — 아래(y 감소), 'U' — 위(y 증가), 'R' — 오른쪽(x 증가), 'L' — 왼쪽(x 감소)이다. 선분은 시작 패드부터 끝 패드까지 연결되는 순서대로 나열되어야 한다.

각 폴리라인은 자기 교차나 자기 접촉이 없어야 한다. 서로 다른 폴리라인은 공통점이 없어야 한다. 폴리라인 정점의 결과 좌표는 절댓값이 $10^4$를 넘지 않아야 한다. 문자와 정수는 공백으로 구분한다. 형식을 확인하려면 예제 출력을 참조하시오. 둘 이상의 해가 존재할 경우, 그중 아무거나 하나를 출력하면 된다.

예제

예제 입력 1

4
1 2 3 4 1 2 3 4

예제 출력 1

YES
3 U 1 R 4 D 1
5 D 1 L 2 U 3 R 6 D 2
5 D 2 R 6 U 3 L 2 D 1
3 D 1 R 4 U 1

예제 입력 2

4
1 2 3 4 1 3 2 4

예제 출력 2

NO

참고

예제 1에 대한 가능한 회로 중 하나가 그림에 나타나 있다. 예제 2에서는 서로 다른 트랙이 교차하지 않도록 패드를 연결할 수 없다.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.