시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB78302362.162%

문제

《100% Orange Juice》는 6면체 주사위를 이용해서 최대 $4$명의 플레이어가 함께 플레이할 수 있는 보드게임 형태의 아케이드 게임입니다. 플레이어는 캐릭터를 하나 선택하고, 각자의 목적(스타 $200$개 획득, 상대방을 $14$번 쓰러트리기 등)을 달성하기 위해 플레이하며, 가장 먼저 목적을 달성한 플레이어가 승리합니다.

이 보드게임에는 전투 시스템이 존재합니다. 캐릭터마다 $4$개의 고유의 능력치 체력, 공격, 방어, 회피를 갖고 있습니다. 전투는 선공과 후공이 일대일로 수행하며 다음과 같은 방식으로 진행됩니다.


전투 로직

  1. 선공이 공격수, 후공이 수비수가 된다.
  2. 공격수가 주사위를 던진다. $\max(1, ($주사위$\,\,+\,\,$공격$))$ 값이 이번 공격수의 공격의 공격력이다.
  3. 수비수는 공격력과 자신의 방어, 회피 능력치를 보고 방어와 회피 중 무엇을 수행할지 결정한다.
    • (수비수가 방어를 선택했을 시) 수비수가 주사위를 던진다. $\max(1, ($주사위$\,\,+\,\,$방어$))$ 값이 이번 수비수의 방어력이다. $\max(1,\,$공격력$\,\,-\,\,$방어력$)$ 만큼의 체력을 잃는다.
    • (수비수가 회피를 선택했을 시) 수비수가 주사위를 던진다. $\max(1, ($주사위$\,\,+\,\,$회피$))$ 값이 이번 수비수의 회피력이다. 만약 회피력이 공격력보다 크면 회피에 성공한다. 만약 회피력이 공격력보다 작거나 같다면 회피에 실패하고, 공격력만큼의 체력을 잃는다.
  4. 수비수의 체력이 $0$ 이하가 되면 공격수가 승리한다.
  5. 공격수와 수비수의 역할을 바꾼다.
  6. 선공과 후공 각각 공격을 한 번씩 수행하면 전투를 종료한다.

전투 시 주사위 운도 중요하지만, 캐릭터의 능력치도 매우 중요합니다. 따라서 캐릭터 간의 전투 밸런스를 측정해보기 위해 다음과 같이 밸런스 측정을 위한 AI 로직을 만들고, AI끼리 전투를 시켜봄으로써 전투 밸런스를 측정해볼 수 있습니다.


밸런스 측정을 위한 AI 로직

(전투 로직에서 추가되거나 변경된 규칙의 경우 굵게 표시)

  1. 선공이 공격수, 후공이 수비수가 된다.
  2. 공격수가 주사위를 던진다. $\max(1, ($주사위$\,\,+\,\,$공격$))$ 값이 이번 공격수의 공격의 공격력이다.
  3. 수비수는 공격력과 자신의 방어, 회피 능력치를 보고 방어와 회피 중 무엇을 수행할지 결정한다.
    • 만약 현재 체력이 $\max(1,\,$공격력$\,\,-\,\,(6 +\,\,$방어$))$ 이하이면 회피를 선택한다.
    • 그 외에 만약 공격력이 $\max(1, 1 +\,\,$회피$)$ 미만이면 회피를 선택한다.
    • 그 외에 만약 공격력이 현재 체력 이상이면 방어를 선택한다.
    • 그 외에 만약 공격력이 $\max(1, 3 +\,\,$회피$)$ 미만이면 회피를 선택한다.
    • 그 외의 경우 방어를 선택한다.
    • (수비수가 방어를 선택했을 시) 수비수가 주사위를 던진다. $\max(1, ($주사위$\,\,+\,\,$방어$))$ 값이 이번 수비수의 방어력이다. $\max(1,\,$공격력$\,\,-\,\,$방어력$)$ 만큼의 체력을 잃는다.
    • (수비수가 회피를 선택했을 시) 수비수가 주사위를 던진다. $\max(1, ($주사위$\,\,+\,\,$회피$))$ 값이 이번 수비수의 회피력이다. 만약 회피력이 공격력보다 크면 회피에 성공한다. 만약 회피력이 공격력보다 작거나 같다면 회피에 실패하고, 공격력만큼의 체력을 잃는다.
  4. 수비수의 체력이 $0$ 이하가 되면 공격수가 승리한다.
  5. 공격수와 수비수의 역할을 바꾼다.
  6. 승자가 정해질 때까지 위 과정을 반복한다.

선공과 후공의 캐릭터 능력치가 주어지면 밸런스 측정을 위한 AI 로직을 따라서 전투를 수행했을 때 선공이 승리할 확률을 계산해봅시다.

입력

첫 번째 줄에는 선공 캐릭터의 체력, 공격, 방어, 회피를 나타내는 정수 값이 차례로 주어집니다.

두 번째 줄에는 후공 캐릭터의 체력, 공격, 방어, 회피를 나타내는 정수 값이 차례로 주어집니다.

출력

선공이 승리할 확률을 출력합니다.

출력한 값과 정답과의 절대 오차 또는 상대 오차가 $10^{-6}$ 이하여야 합니다.

제한

  • $1 \le\,\,$체력$\,\,\le 100$
  • $-2 \le\,\,$공격, 방어, 회피$\,\,\le 2$
  • 6면체 주사위에서 각각의 값이 나올 확률은 $\frac{1}{6}$ 으로 동일

예제 입력 1

4 1 -1 2
5 1 -1 1

예제 출력 1

0.549831898994

예제 입력 2

5 1 -1 1
4 1 -1 2

예제 출력 2

0.641504155052

예제 입력 3

45 0 2 -1
73 -2 0 2

예제 출력 3

0.500277608641

예제 입력 4

1 -2 -2 -2
10 2 2 2

예제 출력 4

0.000000002084

예제 입력 5

1 0 0 2
1 0 0 2

예제 출력 5

0.580645161290

선공이 승리할 확률은 $\frac{18}{31}$입니다.

예제 입력 6

4 -2 -2 0
1 2 0 0

예제 출력 6

0.462962962963

선공이 승리할 확률은 $\frac{25}{54}$입니다.

출처

Contest > BOJ User Contest > 보드게임컵 > 보드게임컵 K번