DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

멋없는 격자

문제로 돌아가기

해설

결과 격자를 BBB라고 하자.

먼저 다음 조건이 핵심이다.

Bi,j+1≠Bi+1,j(1≤i<N, 1≤j<M).B_{i,j+1} \neq B_{i+1,j}\qquad(1\leq i<N,\ 1\leq j<M).Bi,j+1​=Bi+1,j​(1≤i<N, 1≤j<M).

이 조건이 깨지는 칸 (i,j)(i,j)(i,j)가 있다면, (i,j)(i,j)(i,j)까지 같은 경로를 따라간 뒤 한 경로는 오른쪽-아래, 다른 경로는 아래-오른쪽으로 이동하고, (i+1,j+1)(i+1,j+1)(i+1,j+부터 다시 같은 경로를 따라가면 된다. 두 경로에서 달라지는 유일한 위치의 문자가 같으므로 같은 문자열을 얻는다.

반대로 서로 다른 두 최단 경로를 잡고 처음으로 다른 방향으로 이동하는 순간을 보자. 두 경로가 다음에 방문하는 칸은 어떤 (i,j+1)(i,j+1)(i,j+1)과 (i+1,j)(i+1,j)(i+1,j)이다. 위 조건에 의해 두 문자가 다르므로 두 경로가 만드는 문자열도 다르다.

따라서 격자가 멋있는 격자가 아닌 것과 위 조건은 동치이다.

i+ji+ji+j가 같은 칸들을 하나의 반대각선이라고 하자. 위 조건은 각 반대각선의 값이 위에서 아래로 0,1,0,1,…0,1,0,1,\ldots0,1,0,1,… 또는 1,0,1,0,…1,0,1,0,\ldots1,0,1, 중 하나여야 한다는 뜻이다. 서로 다른 반대각선 사이에는 아무 제약이 없다.

반대각선 하나의 길이를 LLL이라 하자. 기준 패턴을 Pi,j=(i−1) mod 2P_{i,j}=(i-1)\bmod 2Pi,j​=(i−1)mod로 두고, 이 반대각선에서 와 가 다른 칸의 수를 라 하자. 이 반대각선을 기준 패턴으로 만들 때 필요한 반전 수는 , 반대 패턴으로 만들 때 필요한 반전 수는 이다.

따라서 이 반대각선의 최소 비용은

m=min⁡(c,L−c)m=\min(c,L-c)m=min(c,L−c)

이고, 더 비싼 선택으로 바꿀 때 추가되는 비용은

w=∣L−2c∣w=|L-2c|w=∣L−2c∣

이다.

모든 반대각선의 최소 비용 합을 SSS라 하자. 반대각선 길이의 합은 NMNMNM이므로 가능한 최대 비용은 NM−SNM-SNM−S이다.

이제 SSS와 NM−SNM-SNM−S 사이의 모든 정수가 실제로 가능함을 보이면 된다. 반대각선을 길이의 오름차순으로 정렬한다. 길이가 LLL인 반대각선의 www는 LLL과 같은 홀짝성을 가지며 0≤이다. 길이 인 첫 반대각선 앞에는 각 길이 인 반대각선이 두 개씩 있다. 길이 에서는 이고, 홀수 길이에서는 항상 이다. 따라서 앞선 의 합을 라 하면 항상 이다. 같은 길이의 두 번째 이후 반대각선에서는 가 더 커질 뿐이다. 그러므로 항상

w≤P+1w\leq P+1w≤P+1

이다.

부분합이 0,1,…,P0,1,\ldots,P0,1,…,P를 모두 만들 수 있고 새 가중치가 w≤P+1w\leq P+1w≤P+1이라면, 새 부분합은 0,1,…,P+w0,1,\ldots,P+w0,1,를 모두 만들 수 있다. 길이 인 첫 반대각선부터 귀납하면 모든 의 부분합은 부터 그 합까지 끊김 없이 모두 가능하다.

따라서 정확히 KKK번 반전하는 답이 존재할 필요충분조건은

S≤K≤NM−SS\leq K\leq NM-SS≤K≤NM−S

이다.

실제 선택도 같은 귀납을 역순으로 사용하면 된다. 정렬된 www의 누적합을 저장하고 R=K−SR=K-SR=K−S라 하자. 뒤에서부터 보면서 현재 RRR이 앞쪽 가중치의 누적합보다 크면 현재 반대각선의 더 비싼 패턴을 반드시 선택하고 RRR에서 ww를 뺀다. 그렇지 않으면 더 싼 패턴을 선택한다. 위의 연속 부분합 성질 때문에 항상 정확히 으로 끝난다.

격자를 한 번 순회해 각 반대각선의 L,cL,cL,c를 구하고, 반대각선 N+M−1N+M-1N+M−1개를 정렬하면 된다. 시간 복잡도는 O(NM+(N+M)log⁡(N+M))O(NM+(N+M)\log(N+M))O(NM+, 메모리 복잡도는 출력 격자를 제외하면 이다.

Solution written by GPT5.6

1
)
0
,
…
2
AAA
PPP
ccc
ccc
L−cL-cL−c
w≤L0\leq w\leq L
0≤w≤L
L≥2L\geq2L≥2
1,2,…,L−11,2,\ldots,L-11,2,…,L−1
111
w=1w=1w=1
w≥1w\geq1w≥1
www
PPP
P≥L−1P\geq L-1P≥L−1
PPP
…
,
P
+
w
111
www
000
w
R=0R=0R=0
(N+
M)log(N+
M))
O(N+M)O(N+M)O(N+M)