| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 2 초 | 1024 MB | 158 | 42 | 40 | 28.169% |
$N \times M$ 칸으로 이루어진 격자가 있다. 격자의 일부 칸들은 막혀서 갈 수 없는 칸들이고, 다른 칸들은 갈 수 있는 칸들이다. 이제 다음 규칙을 따라서 갈 수 있는 칸들에 색을 칠하려고 한다.
예를 들어 다음 예를 살펴보자. 2ドル \times 3$ 격자의 모든 칸이 갈 수 있는 칸들인 다음 예제에서, 가장 왼쪽 위인 $(0, 0)$에서 출발하면 왼쪽 그림과 가운데 그림의 예와 같이, 어떻게 이동하더라도 모든 갈 수 있는 칸을 적어도 한 번 파란색, 그리고 적어도 한 번 노란색으로 칠할 수 없다. 반면, $(0, 1)$에서 출발하여 오른쪽 그림처럼 이동하면 모든 갈 수 있는 칸을 적어도 한 번 파란색, 그리고 적어도 한 번 노란색으로 칠할 수 있음을 알 수 있다.
격자의 크기와 배치가 주어졌을 때, 모든 갈 수 있는 칸을 파란색과 노란색으로 칠할 수 있는 지를 구하려 한다. 여러분은 이 문제를 풀기 위해서 다음 함수를 구현해야만 한다.
int yellowblue( int N, int M, vector<string> V ) ; 단 한번 호출되는 함수 이다. N과 M은 격자의 크기를 나타낸다. V는 격자의 상태를 나타내는 크기 N인 string 의 배열(vector)이다. V의 각 string의 길이는 M이다. 격자의 $(i, j)$번째 칸이 갈 수 있는 칸이라면 V[$i$]의 $j$번째 글자는 ‘.’이고, 막혀 있는 칸이면 ‘#’이다. 만약 어떤 위치에 서 시작하여 격자의 모든 갈 수 있는 칸을 적어도 한 번 파란색, 적어도 한 번 노란색으로 칠할 수 있다면 1ドル$을, 그렇지 않다면 0ドル$을 return해야 한다.여러분은 grid.cpp라는 이름을 가진 하나의 파일을 제출해야만 한다. 이 파일에는 다음의 함수가 구현되어 있어야 한다.
int yellowblue( int N, int M, vector<string> V ) ;이 함수는 위에서 설명한 것과 같이 동작하여야 한다. 물론, 다른 함수들을 만들어서 내부적으로 사용할 수 있다. 제출한 코드는 입출력을 수행하거나 다른 파일에 접근하여서는 안된다.
주어지는 grader는 다음과 같은 형식으로 입력을 읽는다.
.’과 ‘#’으로 이루어진 길이 $M$인 문자열로, 이 문자열의 $j$번째 (1ドル ≤ j ≤ M)$ 글자가 ‘.’이라면 격자의 $(i, j-1)$번째 칸은 갈 수 있는 칸이고, ‘#’이면 격자의 $(i, j-1)$번째 칸은 막혀 있는 칸이다.주어지는 grader는 여러분의 코드가 yellowblue() 함수에서 리턴한 값을 출력한다.
| 번호 | 배점 | 제한 |
|---|---|---|
| 1 | 30 | $N, M ≤ 50$ |
| 2 | 70 | 추가 제한이 없다. |
1 1 .
1
2 3 ... ...
1
3 3 ... ..# .##
1
3 3 .## #.. #..
0
Olympiad > 국제정보올림피아드 대표학생 선발고사 > 2020 > 1차 선발고사 4번
C++17, C++14, C++20, C++14 (Clang), C++17 (Clang), C++20 (Clang)