마비노기 인벤토리

NYPC 2019 · 예선

마비노기의 인벤토리는 다른 게임의 인벤토리와는 달리 아이템마다 특정 크기를 갖고 있고, 각각 크기에 맞추어 인벤토리의 원하는 위치에 겹치지 않게 배치할 인벤토리에 배치할 수 있다.

아래 <그림 1>은 실제 마비노기 인벤토리의 스크린샷이다.

<그림 1> 실제 마비노기 인벤토리의 스크린샷
<그림 1> 실제 마비노기 인벤토리의 스크린샷

현재 재성이의 인벤토리는 세로 길이 HH, 가로 길이 WWH×WH\times W 크기이다. 재성이는 은행에서 미리 모아놓은 양털과 나무장작을 찾아 상점에 가서 팔려고 한다. 양털 하나를 상점에 팔 때 AA원을 받을 수 있고, 나무장작 하나를 상점에 팔 때 BB원을 받을 수 있다. 은행과 상점을 왕복하는 것은 매우 번거로운 일이므로 한번에 최대한 많은 돈을 벌 수 있도록 인벤토리에 넣어 이동하고 싶다.

이 때 양털과 나무장작은 각각 2×22 \times 2, 3×13 \times 1 크기를 차지한다. 아이템은 인벤토리 내의 공간에 다른 아이템과 겹치지 않게 어디에든 배치할 수 있지만 아이템을 회전할 수는 없다. 즉, 나무장작을 9090도 회전해서 1×31 \times 3으로 배치할 수 없다. (문제에 주어진 시뮬레이터의 내용을 참고하면 좋다.)

인벤토리의 크기와 원래 있던 아이템들에 대한 정보가 주어졌을 때, 은행에서 상점을 한 번 갈 때 최대한 많은 돈을 벌어보자. 단, 원래 있던 아이템은 재배치할 수 없다.

입력 형식

첫 줄에 인벤토리의 세로 크기 HH, 가로 크기 WW, 양털 하나의 가격 AA, 나무장작 하나의 가격 BB가 공백으로 구분되어 주어진다. (1H,W181 \le H, W \le 18; 0A,B100000 \le A, B \le 10\,000)

그다음 HH개의 줄에 걸쳐 H×WH\times W 크기의 인벤토리에 대한 정보가 주어진다. -는 인벤토리에서 빈칸을 나타내고, X는 인벤토리에 이미 다른 아이템이 놓여있음을 의미한다.

출력 형식

첫 줄에 은행에서 상점을 한 번 갈 때 최대한 많이 벌 수 있는 돈의 액수와 그 때 담은 양털의 개수 ss와 나무장작 개수 ww를 공백으로 구분하여 출력한다.

그 다음 ss개 줄에 걸쳐 각 줄에 양털을 놓은 인벤토리 왼쪽 위 좌표를 행 번호, 열 번호 순서대로 출력한다. 다음에는 ww개 줄에 걸쳐 각 줄에 나무장작을 놓은 인벤토리 왼쪽 위 좌표를 행 번호, 열 번호 순서대로 출력한다.

만약, 가능한 답이 여러 가지라면 그중 아무거나 하나 출력한다.

예제 1

입력

5 5 4 4 XXXXX X---X X---X X---X XXXXX

출력

12 0 3 2 2 2 3 2 4

예제 2

입력

5 5 4 4 XXXXX X--XX X--X- XXXX- XXXX-

출력

8 1 1 2 2 3 5

채점 방식

이 문제는 풀이 소스코드를 제출하지 않고, 각 테스트케이스의 입력데이터를 다운받아 알맞은 출력 파일을 만들어 출력 파일만을 제출하는 문제다.

문제 해결을 도와주는 시뮬레이터가 아래 미션에 대해 제공된다. 제공되는 시뮬레이터는 최신 버전의 크롬 브라우저에서 여는 것을 권장한다.

미션 1
미션 2
미션 3
미션 4
미션 5
미션 6
미션 7
미션 8
미션 9
미션 10

해설