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

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

Petoris

시간 제한8초메모리 제한512 MB

요약
회전만 가능한 블록을 보드에 겹치지 않게 놓아 완성되는 가로줄 수를 최대로 만들고, 버리면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
완전 탐색, 구현, 시뮬레이션, 배열
정답자
아직 제출이 없습니다

문제

당신은 petoris라는 퍼즐 게임을 하고 있다. 이 게임은 정사각형 격자로 나뉜 보드와, 각각 하나의 격자에 맞는 정사각형 타일로 진행된다.

게임의 각 단계에서 타일이 일부 채워진 보드가 주어진다. 또한 여러 타일로 이루어진 블록도 하나 주어진다. 다음 배치 제약에 따라 이 블록을 보드 어딘가에 놓거나 버려야 한다.

  • 블록은 회전할 수 있지만, 나눌 수 없고 뒤집을 수도 없다.
  • 블록의 어떤 타일도 보드에 이미 있는 타일과 충돌해서는 안 된다.
  • 블록의 모든 타일은 보드 안에 놓여야 한다.

이번 단계에서 얻을 수 있는 최대 점수를 구하는 프로그램을 작성하시오. 점수는 블록을 놓은 뒤 타일로 완전히 채워진 가로줄의 개수이며, 블록을 버리는 경우에는 -1이다.

입력

입력의 첫 줄은 데이터 세트의 수 N이다. 그다음 N개의 데이터 세트가 이어진다.

각 데이터 세트는 블록과 보드를 설명하는 줄로 이루어진다. 블록과 보드의 설명은 모두 세로와 가로 크기를 나타내는 두 정수 H와 W가 있는 줄로 시작한다. 그다음 H개의 줄이 이어지며, 각 줄에는 W개의 문자가 있다. '#'은 타일, '.'은 빈칸을 나타낸다. 0 < H ≤ 64, 0 < W ≤ 64라고 가정할 수 있다. 각 블록은 하나 이상의 타일로 이루어지며 모든 타일은 서로 연결되어 있다. 각 보드는 0개 이상의 타일을 포함하며, 처음 상태에서 타일로 완전히 채워진 가로줄은 없다.

출력

각 데이터 세트마다 얻을 수 있는 최대 점수를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    5
    4 4
    ....
    ....
    ####
    ....
    12 8
    ........
    ........
    ........
    ........
    ........
    .......#
    ##.##..#
    .#######
    .#######
    .#######
    .#######
    .####.#.
    4 4
    ....
    ....
    .###
    ...#
    12 8
    ........
    ........
    ........
    ........
    ........
    ........
    ........
    ##...###
    ##.#####
    #######.
    #######.
    #######.
    4 4
    ####
    #..#
    #..#
    ####
    12 8
    ........
    ........
    ........
    ........
    ........
    .......#
    ##.##..#
    ##....##
    ##.##.##
    ##.##.##
    ##....##
    .####.#.
    2 2
    ##
    #.
    3 3
    .##
    .##
    ##.
    4 4
    ....
    .##.
    .##.
    ....
    2 2
    ..
    ..
    
    예상 출력
    4
    1
    4
    -1
    2