문제
농부 John은
캔버스를 네 개의 동일한 사분면으로 나눈다. 수직 및 수평 선을 중심을 기준으로 나눈다.
오른쪽 위 사분면에 멋진 그림을 그린다.
칸마다 '#'은 칠해진 부분을, '.'은 비어 있는 부분을 나타낸다.
반사(reflection) 를 수행하여, 그림을 다른 세 개의 사분면에 대칭적으로 복사한다.
예를 들어,
.#..
.#..
.##.
....
이를 중심선을 기준으로 반사하면 최종 캔버스는 다음과 같이 된다.
..#..#..
..#..#..
.##..##.
........
........
.##..##.
..#..#..
..#..#..
그러나 Bessie가 캔버스를 훔쳐 일부를 훼손해버렸다!
그녀는 일부 칠해진 셀을 지웠으며,
또 다른 셀에 새로운 색을 칠하기도 했다.
이후 Bessie는 캔버스를 원래대로 돌려놓았지만, 원래의 반사 조건을 유지하지 않고 임의로 변형되었다.
Farmer John은 캔버스를 최소한의 수정으로 원래의 반사 조건을 만족하는 상태로 복구하고 싶다.
수정 작업은 하나의 셀을 칠하거나('#'), 지우는('.') 것 중 하나이다.
최소한의 수정 횟수를 계산해야 한다.
이뿐만 아니라, 이후 U개의 업데이트가 주어지며, 각 업데이트는 특정 셀을 토글(toggle)하는 것이다.
즉, 만약 셀이 '#'이라면 '.'으로 바뀌고,
만약 셀이 '.'이라면 '#'으로 바뀐다.
각 업데이트 전과 후의 최소 수정 횟수를 출력하라.
입력
첫 번째 줄에 정수
다음
문자는
#
(칠해짐) 또는.
(비어 있음)이다.
이후
출력
총
첫 번째 줄에는 업데이트가 수행되기 전의 최소 수정 횟수를 출력한다.
이후
부분문제
번호 | 점수 | 조건 |
---|---|---|
#1 | 20점 | N ≤ 4 |
#2 | 30점 | U ≤ 10 |
#3 | 50점 | 추가 제약 없음. |
예제1
4 5
..#.
##.#
####
..##
1 3
2 3
4 3
4 4
4 4
4
3
2
1
0
1
다음 캔버스는 반사 조건을 만족하며, 원래 캔버스와 4번의 연산만으로 차이가 납니다:
....
####
####
....
원래 캔버스가 반사 조건을 만족하도록 만드는 데에는 최소 4번의 연산이 필요합니다.
(1,3)을 업데이트한 후 캔버스는 다음과 같이 보입니다:
....
##.#
####
..##
이제 캔버스를 반사 조건을 만족하도록 만드는 데 3번의 연산이 필요합니다.
(2,3)을 업데이트한 후 캔버스는 다음과 같이 보입니다:
....
####
####
..##
이제 캔버스를 반사 조건을 만족하도록 만드는 데 2번의 연산이 필요합니다.