100% Orange Juice!
시간 제한1초메모리 제한1024 MB
주어진 AI 전투 규칙에 따라 두 캐릭터의 전투를 모사하고, 상태와 주사위 눈에 대한 확률 DP로 선공의 승률을 계산한다.
문제

《100% Orange Juice》는 6면체 주사위를 이용해서 최대 명의 플레이어가 함께 플레이할 수 있는 보드게임 형태의 아케이드 게임입니다. 플레이어는 캐릭터를 하나 선택하고, 각자의 목적(스타 개 획득, 상대방을 번 쓰러트리기 등)을 달성하기 위해 플레이하며, 가장 먼저 목적을 달성한 플레이어가 승리합니다.
이 보드게임에는 전투 시스템이 존재합니다. 캐릭터마다 개의 고유의 능력치 체력, 공격, 방어, 회피를 갖고 있습니다. 전투는 선공과 후공이 일대일로 수행하며 다음과 같은 방식으로 진행됩니다.
전투 로직
-
선공이 공격수, 후공이 수비수가 된다.
-
공격수가 주사위를 던진다. 주사위공격 값이 이번 공격수의 공격의 공격력이다.
-
수비수는 공격력과 자신의 방어, 회피 능력치를 보고 방어와 회피 중 무엇을 수행할지 결정한다.
- (수비수가 방어를 선택했을 시) 수비수가 주사위를 던진다. 주사위방어 값이 이번 수비수의 방어력이다. 공격력방어력 만큼의 체력을 잃는다.
- (수비수가 회피를 선택했을 시) 수비수가 주사위를 던진다. 주사위회피 값이 이번 수비수의 회피력이다. 만약 회피력이 공격력보다 크면 회피에 성공한다. 만약 회피력이 공격력보다 작거나 같다면 회피에 실패하고, 공격력만큼의 체력을 잃는다.
-
수비수의 체력이 이하가 되면 공격수가 승리한다.
-
공격수와 수비수의 역할을 바꾼다.
-
선공과 후공 각각 공격을 한 번씩 수행하면 전투를 종료한다.
전투 시 주사위 운도 중요하지만, 캐릭터의 능력치도 매우 중요합니다. 따라서 캐릭터 간의 전투 밸런스를 측정해보기 위해 다음과 같이 밸런스 측정을 위한 AI 로직을 만들고, AI끼리 전투를 시켜봄으로써 전투 밸런스를 측정해볼 수 있습니다.
밸런스 측정을 위한 AI 로직
(전투 로직에서 추가되거나 변경된 규칙의 경우 굵게 표시)
-
선공이 공격수, 후공이 수비수가 된다.
-
공격수가 주사위를 던진다. 주사위공격 값이 이번 공격수의 공격의 공격력이다.
-
수비수는 공격력과 자신의 방어, 회피 능력치를 보고 방어와 회피 중 무엇을 수행할지 결정한다.
- 만약 현재 체력이 공격력방어 이하이면 회피를 선택한다.
- 그 외에 만약 공격력이 회피 미만이면 회피를 선택한다.
- 그 외에 만약 공격력이 현재 체력 이상이면 방어를 선택한다.
- 그 외에 만약 공격력이 회피 미만이면 회피를 선택한다.
- 그 외의 경우 방어를 선택한다.
- (수비수가 방어를 선택했을 시) 수비수가 주사위를 던진다. 주사위방어 값이 이번 수비수의 방어력이다. 공격력방어력 만큼의 체력을 잃는다.
- (수비수가 회피를 선택했을 시) 수비수가 주사위를 던진다. 주사위회피 값이 이번 수비수의 회피력이다. 만약 회피력이 공격력보다 크면 회피에 성공한다. 만약 회피력이 공격력보다 작거나 같다면 회피에 실패하고, 공격력만큼의 체력을 잃는다.
-
수비수의 체력이 이하가 되면 공격수가 승리한다.
-
공격수와 수비수의 역할을 바꾼다.
-
승자가 정해질 때까지 위 과정을 반복한다.
선공과 후공의 캐릭터 능력치가 주어지면 밸런스 측정을 위한 AI 로직을 따라서 전투를 수행했을 때 선공이 승리할 확률을 계산해봅시다.
입력
첫 번째 줄에는 선공 캐릭터의 체력, 공격, 방어, 회피를 나타내는 정수 값이 차례로 주어집니다.
두 번째 줄에는 후공 캐릭터의 체력, 공격, 방어, 회피를 나타내는 정수 값이 차례로 주어집니다.
출력
선공이 승리할 확률을 출력합니다.
출력한 값과 정답과의 절대 오차 또는 상대 오차가 이하여야 합니다.
제한
- 체력
- 공격, 방어, 회피
- 6면체 주사위에서 각각의 값이 나올 확률은 으로 동일