페이지를 불러오는 중…
해결한 사람
1
명
정답률
100.00
%
시간 제한
1000
ms
메모리 제한
2048
MB
Gardens by the Bay는 싱가포르에 있는 공원이다. 이 공원에는 슈퍼트리라는 이름의 개의 탑이 있다. 이 탑은 부터 까지 번호가 매겨져 있다. 우리는 0개 이상의 다리를 지으려고 한다. 각각의 다리는 서로 다른 두 탑을 잇고, 양방향으로 건널 수 있다. 한 쌍의 탑을 잇는 다리는 최대 하나이다.
탑 에서 탑 로의 경로는 다음 조건을 만족하는 하나 또는 그 이상의 탑의 서열이다.
정의에 의해서 탑 하나에서 자기 자신으로 가는 경로의 수는 정확하게 하나이며, 탑 에서 탑 로 가는 경로의 가짓수는 탑 에서 탑 로 가는 경로의 가짓수와 같다는 데 유의하라.
설계를 담당한 책임자는 다음 조건을 만족하게 다리를 지으려고 한다. 모든 에 대해서, 탑 에서 탑 로 가는 서로 다른 경로가 정확하게 가지이다. 이때 이다.
설계 요구 사항을 만족하게 다리를 짓거나, 이것이 불가능하다는 것을 판정하는 프로그램을 작성하시오.
다음 함수를 구현해야 한다.
int construct(int[][] p)
build 함수를 정확히 한 번 호출하여 어떻게 다리를 짓는지 제출한다. 그다음 을 리턴해야 한다.build 함수를 호출하지 않고 을 리턴해야 한다.build 함수는 다음과 같이 정의된다.
void build(int[][] b)
다음 호출을 고려해 보자.
construct([[1, 1, 2, 2], [1, 1, 2, 2], [2, 2, 1, 2], [2, 2, 2, 1]])
이는 탑 에서 탑 로 정확히 하나의 경로가 있어야 한다는 뜻이다. 그 외 모든 다른 탑의 쌍 중 인 쌍에는 탑 에서 탑 로 가는 경로가 정확히 두 개 있어야 한다.
개의 다리를 지어서 다음 탑의 쌍 , , , 을 이으면 조건을 만족한다.
이 답을 제출하기 위해서 construct 함수는 다음과 같이 함수 호출을 해야 한다.
build([[0, 1, 0, 0], [1, 0, 1, 1], [0, 1, 0, 1], [0, 1, 1, 0]])

그다음 리턴 값은 이어야 한다.
이 경우에는 요구 사항을 만족하게 다리를 놓는 방법이 여러 가지 존재하고, 그중 어느 것도 정답으로 인정된다.
다음 호출을 고려해 보자.
construct([[1, 0], [0, 1]])
이는 어떤 두 탑에 대해서도 경로가 없어야 한다는 뜻이다. 이는 다리를 짓지 않는 것으로 해결할 수 있다.
따라서 construct 함수는 다음과 같이 함수 호출을 해야 한다.
build([[0, 0], [0, 0]])
그다음 construct는 을 리턴해야 한다.
다음 호출을 고려해 보자.
construct([[1, 3], [3, 1]])
이는 탑 에서 탑 로 정확히 개의 경로가 있어야 한다는 뜻이다. 이 제약 조건을 맞추는 방법은 없다. 따라서 construct 함수는 build 함수를 호출하지 않고 을 리턴해야 한다.
construct의 리턴 값construct의 리턴 값이 이면, 샘플 그레이더는 추가로 다음을 출력한다.
4
1 1 2 2
1 1 2 2
2 2 1 2
2 2 2 1
1
0 1 0 0
1 0 1 1
0 1 0 1
0 1 1 0
2
1 0
0 1
1
0 0
0 0
2
1 3
3 1
0
International Olympiad in Informatics (IOI) 2020, official task package and official Korean statement.
Reporch에서 한국어 번역, 수식 표기, 이미지 호스팅 및 형식을 수정했습니다.
로그인 상태를 확인하는 중입니다.