용이 되어 싸우기 (스몰)
시간 제한5초메모리 제한512 MB
드래곤과 기사의 체력과 공격력, 버프 및 디버프 수치가 주어질 때, 기사를 물리치는 최소 턴 수를 구하거나 불가능하면 IMPOSSIBLE을 출력합니다.
문제
당신은 둥지를 지키려는 상냥한 용이고, 욕심 많은 기사와 싸운다. 용의 체력은 , 공격력은 이고, 기사의 체력은 , 공격력은 이다. 도중에 용의 체력이 0 이하가 되면 용은 쓰러지고 그 자리에서 패배한다. 기사의 체력이 0 이하가 되면 기사가 쓰러지고 용이 승리한다.
전투는 턴 단위로 진행한다. 각 턴에서 용이 먼저 행동하며, 다음 네 가지 중 하나를 골라 실행한다.
- 공격: 상대의 체력을 자신의 공격력만큼 줄인다.
- 강화: 남은 전투 동안 자신의 공격력을 만큼 올린다.
- 회복: 자신의 체력을 로 되돌린다.
- 약화: 남은 전투 동안 상대의 공격력을 만큼 내린다. 약화로 상대의 공격력이 0보다 작아지면 대신 0으로 맞춘다.
그다음, 용의 행동이 끝난 시점에 기사의 체력이 0보다 크면 기사가 공격을 한 번 실행한다. 그리고 턴이 끝난다. 기사를 쓰러뜨린 턴은 기사가 행동하지 못해도 한 턴으로 센다.
강화는 서로 중첩된다. 강화할 때마다 공격력이 씩 더 올라간다. 약화도 같은 방식으로 중첩된다.
오늘 밤 축제에서 마을 사람이 마시멜로 굽는 일을 도우려면 늦으면 안 되니, 용은 되도록 적은 턴에 기사를 쓰러뜨리고 싶다. 기사를 쓰러뜨리는 데 필요한 최소 턴 수를 구하거나, 쓰러뜨릴 수 없음을 판정하라.
입력
첫째 줄에 테스트 케이스의 수 가 주어진다. 이어서 개의 테스트 케이스가 주어진다. 각 테스트 케이스는 한 줄로 이루어지며, 여섯 정수 , , , , , 가 공백으로 구분되어 주어진다.
제한
출력
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. 는 1부터 시작하는 테스트 케이스 번호이고, 는 기사를 쓰러뜨리는 데 필요한 최소 턴 수이다. 기사를 쓰러뜨릴 수 없으면 자리에 IMPOSSIBLE을 출력한다.
힌트
예제 입력의 첫 번째 테스트 케이스에서 용의 체력은 11, 공격력은 5이고 기사의 체력은 16, 공격력은 5이다. 최적인 행동 순서 하나는 다음과 같다.
- 1턴: 공격. 기사의 체력이 11이 된다. 이어서 기사가 공격해 용의 체력이 6이 된다.
- 2턴: 공격. 기사의 체력이 6이 된다. 이어서 기사가 공격해 용의 체력이 1이 된다.
- 3턴: 회복. 용의 체력이 11로 돌아온다. 이어서 기사가 공격해 용의 체력이 6이 된다. (이 턴에 공격을 했다면 기사의 다음 공격에 용이 쓰러진다.)
- 4턴: 공격. 기사의 체력이 1이 된다. 이어서 기사가 공격해 용의 체력이 1이 된다.
- 5턴: 공격. 기사의 체력이 가 된다. 용이 그 자리에서 승리하고 기사는 다시 공격하지 못한다.
두 번째 테스트 케이스에서 최적인 행동 순서 하나는 다음과 같다.
- 1턴: 강화. 용의 공격력이 3이 된다. 이어서 기사가 공격해 용의 체력이 1이 된다.
- 2턴: 공격. 기사의 체력이 0이 된다. 용이 그 자리에서 승리하고 기사는 다시 공격하지 못한다.
세 번째 테스트 케이스에서는 기사가 두 번만 공격해도 용이 쓰러지고, 용은 기사를 쓰러뜨릴 만큼 빠르게 피해를 주지 못한다. 기사의 공격이 끝날 때마다 회복을 골라 전투를 무한히 끌 수는 있지만, 기사를 실제로 쓰러뜨리지는 못한다.
네 번째 테스트 케이스에서 최적인 행동 순서 하나는 공격, 약화, 강화, 공격, 공격이다.