https://www.acmicpc.net/problem/1780
1780: 논문수
크기가 N×N인 행렬로 표현되는 종이가 있습니다. 종이의 각 셀은 -1, 0, 1 중 하나를 저장합니다. 다음 규칙에 따라 이 행렬을 적절한 크기로 자르고 싶습니다. 모든 서류의 번호가 같은 경우
www.acmicpc.net
종이가 있다
이 종이의 각 셀에는 -1, 0 또는 1이 있습니다.
1. 인접한 셀이 같은 번호로 구성되어 있으면 그대로 사용합니다.
2. 1번이 사실이 아니라면 종이를 9조각으로 자른다.
이 예에서는 9 X 9입니다.
해결 과정:
– 같은 숫자가 아니면 9로 자릅니다. ( N // 3 )
– 중요합니다.
– 같은 숫자가 아니면 다시 9등분으로 잘라주세요. ( (N // 3) // 3 )
– 재귀로 풀기
|
1
2
삼
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
N = 정수(입력())
minus_cnt, zero_cnt, plus_cnt = 0, 0, 0
서류 = ()
~을 위한 _ ~에 범위(N):
열 = 목록(지도(정수입력().rsplit()))
논문.추가(행)
데프 확인(행, 열, n):
글로벌 minus_cnt, zero_cnt, plus_cnt
커 = 논문(행)(열)
~을 위한 나 ~에 범위(행, 행 + N):
~을 위한 제이 ~에 범위(열, 열 + N):
만약에 논문(i)(j) != 커:
next_n = N // 삼
체크(행, 열, next_n) # 1
확인(행, 열 + 다음_n, 다음_n) # 2
확인(행, 열 + (2 * 다음_n), 다음_n) # 삼
체크(행 + next_n, 열, next_n) # 4
체크(행 + next_n, 열 + 다음_n, 다음_n) # 5
체크(행 + next_n, 열 + (2 * 다음_n), 다음_n) # 6
체크(행 + (2 * next_n), 열, next_n) # 7
체크(행 + (2 * next_n), 열 + 다음_n, 다음_n) # 8
체크(행 + (2 * next_n), 열 + (2 * 다음_n), 다음_n) # 9
반품
만약에 커 == –1:
마이너스_cnt += 1
엘리프 커 == 0:
zero_cnt += 1
엘리프 커 == 1:
plus_cnt += 1
반품
확인하다(0, 0N)
인쇄(마이너스_cnt)
인쇄(zero_cnt)
인쇄(플러스_cnt)
|
CS |


