아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Retiling

시간 제한40초메모리 제한1024 MB

요약
양면 타일 격자에서 타일 하나를 뒤집는 비용과 인접한 두 타일을 맞바꾸는 비용이 주어질 때, 목표 배열로 만들기 위한 최소 비용을 구한다.
난이도

보통10점 중 5점

유형
그리디, 정렬, 수학, 구현
정답자
아직 제출이 없습니다

문제

Cody-Jamal이 이번에 선보인 작품은 다양한 무늬로 다시 깔 수 있는 타일로 된 주방 바닥이다. 바닥은 R개의 행과 C개의 열로 이루어진 정사각형 타일 행렬이다. 타일은 양면을 뒤집어 쓸 수 있는데, 한쪽 면은 자홍색이고 다른 쪽 면은 초록색이다.

주방 바닥을 다시 깔기 위해 허용되는 연산은 두 가지다.

  • 타일 한 장을 뒤집어 보이는 색을 자홍색에서 초록색으로, 또는 그 반대로 바꾼다.
  • 서로 인접한 두 타일을 뒤집지 않고 맞바꾼다. 인접함은 가로 또는 세로 방향을 뜻하며 대각선 방향은 해당하지 않는다.

Cody-Jamal의 작품을 감상하는 것은 무료지만, 작품을 직접 건드리는 데는 돈이 든다. 뒤집기 연산 한 번에 F코인, 맞바꾸기 연산 한 번에 S코인이 든다.

현재 바닥의 상태를 보고 있으며, 이를 특정 무늬로 만들고자 한다. 목표를 이루기 위해 써야 하는 최소 코인 수는 얼마인가?

입력

입력의 첫 줄에는 테스트 케이스의 수 T가 주어진다. 그다음 T개의 테스트 케이스가 이어진다. 각 테스트 케이스의 첫 줄에는 4개의 정수 R, C, F, S가 주어지는데, 각각 바닥의 행 수와 열 수, 뒤집기 연산에 드는 코인 비용, 맞바꾸기 연산에 드는 코인 비용이다. 그 뒤로 2⋅R개의 줄이 이어진다. 처음 R개의 줄은 각각 C개의 문자를 포함한다. 이 중 i번째 줄의 j번째 문자는 i번째 행 j번째 열에 있는 타일의 현재 상태를 나타낸다. 현재 보이는 면이 자홍색이면 M, 그렇지 않으면 G이다. 마지막 R개의 줄도 각각 C개의 문자를 포함한다. 이 중 i번째 줄의 j번째 문자는 i번째 행 j번째 열에 있는 타일에 원하는 색을 나타내며, 현재 상태와 같은 문자 체계를 쓴다.

출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력한다. 여기서 x는 테스트 케이스 번호(1부터 시작)이고, y는 타일 색을 현재 상태에서 원하는 상태로 바꾸기 위해 수행해야 하는 연산에 드는 최소 코인 수이다.

제한

  • 1 ≤ T ≤ 100.
  • 1 ≤ R ≤ 10.
  • 1 ≤ C ≤ 10.

예제1

  1. 예제 1

    입력
    2
    2 4 1 1
    MGMG
    MMMG
    GMGM
    MMMM
    3 3 1 1
    MGG
    GMG
    MMM
    MMM
    MGM
    MMG
    
    예상 출력
    Case #1: 3
    Case #2: 4