용이 되어 싸우기 (스몰)

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

요약
드래곤과 기사의 체력과 공격력, 버프 및 디버프 수치가 주어질 때, 기사를 물리치는 최소 턴 수를 구하거나 불가능하면 IMPOSSIBLE을 출력합니다.
난이도

보통10점 중 6점

유형
완전 탐색, 시뮬레이션, 그리디
정답자
아직 제출이 없습니다

문제

당신은 둥지를 지키려는 상냥한 용이고, 욕심 많은 기사와 싸운다. 용의 체력은 HdH_d, 공격력은 AdA_d이고, 기사의 체력은 HkH_k, 공격력은 AkA_k이다. 도중에 용의 체력이 0 이하가 되면 용은 쓰러지고 그 자리에서 패배한다. 기사의 체력이 0 이하가 되면 기사가 쓰러지고 용이 승리한다.

전투는 턴 단위로 진행한다. 각 턴에서 용이 먼저 행동하며, 다음 네 가지 중 하나를 골라 실행한다.

  • 공격: 상대의 체력을 자신의 공격력만큼 줄인다.
  • 강화: 남은 전투 동안 자신의 공격력을 BB만큼 올린다.
  • 회복: 자신의 체력을 HdH_d로 되돌린다.
  • 약화: 남은 전투 동안 상대의 공격력을 DD만큼 내린다. 약화로 상대의 공격력이 0보다 작아지면 대신 0으로 맞춘다.

그다음, 용의 행동이 끝난 시점에 기사의 체력이 0보다 크면 기사가 공격을 한 번 실행한다. 그리고 턴이 끝난다. 기사를 쓰러뜨린 턴은 기사가 행동하지 못해도 한 턴으로 센다.

강화는 서로 중첩된다. 강화할 때마다 공격력이 BB씩 더 올라간다. 약화도 같은 방식으로 중첩된다.

오늘 밤 축제에서 마을 사람이 마시멜로 굽는 일을 도우려면 늦으면 안 되니, 용은 되도록 적은 턴에 기사를 쓰러뜨리고 싶다. 기사를 쓰러뜨리는 데 필요한 최소 턴 수를 구하거나, 쓰러뜨릴 수 없음을 판정하라.

입력

첫째 줄에 테스트 케이스의 수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다. 각 테스트 케이스는 한 줄로 이루어지며, 여섯 정수 HdH_d, AdA_d, HkH_k, AkA_k, BB, DD가 공백으로 구분되어 주어진다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤Hd≤1001 \le H_d \le 100
  • 1≤Ad≤1001 \le A_d \le 100
  • 1≤Hk≤1001 \le H_k \le 100
  • 1≤Ak≤1001 \le A_k \le 100
  • 0≤B≤1000 \le B \le 100
  • 0≤D≤1000 \le D \le 100

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 기사를 쓰러뜨리는 데 필요한 최소 턴 수이다. 기사를 쓰러뜨릴 수 없으면 yy 자리에 IMPOSSIBLE을 출력한다.

힌트

예제 입력의 첫 번째 테스트 케이스에서 용의 체력은 11, 공격력은 5이고 기사의 체력은 16, 공격력은 5이다. 최적인 행동 순서 하나는 다음과 같다.

  • 1턴: 공격. 기사의 체력이 11이 된다. 이어서 기사가 공격해 용의 체력이 6이 된다.
  • 2턴: 공격. 기사의 체력이 6이 된다. 이어서 기사가 공격해 용의 체력이 1이 된다.
  • 3턴: 회복. 용의 체력이 11로 돌아온다. 이어서 기사가 공격해 용의 체력이 6이 된다. (이 턴에 공격을 했다면 기사의 다음 공격에 용이 쓰러진다.)
  • 4턴: 공격. 기사의 체력이 1이 된다. 이어서 기사가 공격해 용의 체력이 1이 된다.
  • 5턴: 공격. 기사의 체력이 −4-4가 된다. 용이 그 자리에서 승리하고 기사는 다시 공격하지 못한다.

두 번째 테스트 케이스에서 최적인 행동 순서 하나는 다음과 같다.

  • 1턴: 강화. 용의 공격력이 3이 된다. 이어서 기사가 공격해 용의 체력이 1이 된다.
  • 2턴: 공격. 기사의 체력이 0이 된다. 용이 그 자리에서 승리하고 기사는 다시 공격하지 못한다.

세 번째 테스트 케이스에서는 기사가 두 번만 공격해도 용이 쓰러지고, 용은 기사를 쓰러뜨릴 만큼 빠르게 피해를 주지 못한다. 기사의 공격이 끝날 때마다 회복을 골라 전투를 무한히 끌 수는 있지만, 기사를 실제로 쓰러뜨리지는 못한다.

네 번째 테스트 케이스에서 최적인 행동 순서 하나는 공격, 약화, 강화, 공격, 공격이다.

예제1

  1. 예제 1

    입력
    4
    11 5 16 5 0 0
    3 1 3 2 2 0
    3 1 3 2 1 0
    2 1 5 1 1 1
    
    예상 출력
    Case #1: 5
    Case #2: 2
    Case #3: IMPOSSIBLE
    Case #4: 5