웜리

시간 제한1초메모리 제한128 MB

요약
다리가 없는 구간이 있는 다리를 건너기 위해 몸통 구간과 순서가 유지되는 다리들을 이동시키는 최소 횟수를 구하거나 불가능함을 판별합니다.
난이도

어려움10점 중 8점

유형
그리디, 투 포인터, 시뮬레이션
정답자
아직 제출이 없습니다

문제

존리는 첫 컴퓨터 게임을 만들고 있다. 오프닝 장면에서 주인공 웜리는 다리 브리질리를 건너야 한다.

웜리는 똑같은 원형 방울 bb개와 다리 ll개로 이루어진 지렁이다. 어느 순간에도 각 다리는 방울 하나의 바로 아래에 있어야 하며, 방울 하나 아래에는 다리가 최대 한 개만 올 수 있다. 방울들은 서로 붙어 있으므로 bb개의 방울은 항상 연속한 널빤지 bb개를 덮는다.

브리질리는 방울 하나의 너비와 같은 널빤지 nn개로 이루어져 있지만, 일부 널빤지는 빠져 있다. 다리는 존재하는 널빤지 위에만 놓일 수 있고, 빈 자리에는 놓일 수 없다.

매 단계마다 웜리는 다음 두 동작 중 정확히 하나를 수행한다.

  • 다리 하나를 앞으로 옮긴다. 이때 (존재하든 빠져 있든) 임의의 개수의 널빤지를 건너뛸 수 있다. 옮긴 뒤 그 다리는 방울 하나의 아래에 있는, 존재하는 널빤지 위에 놓여야 한다. 다리는 다른 다리를 앞질러 갈 수 없으므로 다리들의 좌우 순서는 항상 유지된다.
  • 모든 다리는 현재 널빤지에 그대로 둔 채 모든 방울을 앞으로 한 칸 옮긴다. 이 동작 후에도 각 다리는 여전히 어떤 방울의 아래에 있어야 한다.

처음에 방울들은 가장 왼쪽 널빤지 bb개를 덮고, 다리들은 가장 왼쪽 널빤지 ll개 위에 있다. 방울들이 가장 오른쪽 널빤지 bb개를 덮고 다리들이 가장 오른쪽 널빤지 ll개 위에 놓이면 애니메이션이 끝난다. 가장 왼쪽 널빤지 ll개와 가장 오른쪽 널빤지 ll개는 반드시 존재한다.

다리 이동과 방울 이동을 모두 세어, 웜리가 다리를 건너는 데 필요한 최소 단계 수를 구하라. 건널 수 없다면 불가능하다고 답하라.

입력

첫째 줄에 테스트 케이스의 수를 나타내는 양의 정수 TT가 주어진다 (T≤100T \le 100). 각 테스트 케이스는 두 줄로 이루어진다.

  • 한 줄에 세 정수 ll, bb, nn이 주어진다 (1≤l≤b≤n≤1061 \le l \le b \le n \le 10^6). 각각 다리의 수, 방울의 수, 널빤지의 수이다.
  • 한 줄에 각 문자가 1 또는 0인 길이 nn의 문자열이 주어진다. 1은 존재하는 널빤지를, 0은 빠진 널빤지를 나타낸다.

출력

각 테스트 케이스마다 한 줄에 정수 하나를 출력한다. 웜리가 다리를 건너는 데 필요한 최소 단계 수이다. 건너는 것이 불가능하면 대신 IMPOSSIBLE을 출력한다.

예제3

  1. 예제 1

    입력
    3
    1 2 2
    11
    2 3 5
    11011
    1 3 5
    11011
    
    예상 출력
    1
    IMPOSSIBLE
    5
    
  2. 예제 2

    입력
    4
    2 2 2
    11
    1 1 1
    1
    1 3 3
    111
    2 3 3
    111
    
    예상 출력
    0
    0
    1
    2
    
  3. 예제 3

    입력
    3
    2 2 3
    111
    3 3 5
    11111
    1 1 4
    1111
    
    예상 출력
    IMPOSSIBLE
    IMPOSSIBLE
    IMPOSSIBLE