아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

DEX 내성 굴림

면접 대비

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

요약
난이도, 수정치, 이점 또는 불리함, 최대 5개의 보너스 주사위가 주어질 때 d20 내성 굴림이 성공할 확률을 계산한다.
난이도

보통10점 중 4점

유형
확률, 완전 탐색, 수학, 구현
정답자
아직 제출이 없습니다

문제

이런! 탁상용 롤플레잉 게임 Bungalows & Banshees에서 캠페인을 몇 달째 플레이하던 중, 캐릭터가 실수로 함정을 건드려 거대한 굴러오는 바위에 깔려 죽고 말았다. 위험천만한 바위를 피하는 민첩 내성 굴림에 성공했더라면...

과거에 집착하는 성격인 당신은 그 내성 굴림에 성공할 확률이 실제로 얼마였는지 궁금해진다. 그런데 곰곰이 따져 보니 답이 그렇게 간단하지 않다. 바드의 영감으로 d6 보너스를 받고 있었지만, 술에 취해 있었기 때문에 굴림에 불리함을 받았고, 반면에 민첩 내성 수정치는 꽤 높았으니까...

난이도 dd인 기본 민첩 내성 굴림은 다음과 같이 진행된다. 먼저 d2020(2020면체 주사위)을 굴린다. 굴림 결과가 11이면 즉시 실패하고, 2020이면 즉시 성공한다. 그렇지 않으면 주사위 결과에 캐릭터의 DEX 내성 수정치 mm을 더한다. 합이 난이도 dd 이상이면 성공, 그렇지 않으면 실패다.

여기에는 두 가지 확장이 있다. 첫째, 굴림은 유리함 또는 불리함 중 하나로 이루어질 수 있다. 이 경우 d2020을 하나 대신 둘 굴리고, 유리함이면 더 높은 값, 불리함이면 더 낮은 값만 남긴 뒤 기본 경우와 같은 방식으로 결과를 계산한다. 둘째, 굴림에는 추가 보너스 또는 패널티 주사위가 붙을 수 있다. 이 주사위들은 굴려서 d20 결과에 더하거나 뺀 뒤 dd와 비교한다(유리함이나 불리함에 관계없이 이 보너스와 패널티는 한 번만 굴린다).

내성 굴림의 정보(난이도, DEX 내성 수정치, 유리함/불리함 여부, 추가 보너스 주사위)가 주어질 때, 그 내성 굴림이 성공할 확률을 계산하는 프로그램을 작성하시오.

입력

입력은 세 줄로 이루어진다. 첫째 줄에는 두 정수 dd와 mm(0≤d≤300 \le d \le 30, −10≤m≤10-10 \le m \le 10)이 주어지는데, 각각 굴림의 난이도와 캐릭터의 DEX 내성 수정치다. 둘째 줄에는 굴림이 유리함인지 불리함인지를 나타내는 단어 하나가 주어진다. 이 단어는 "straight"(유리함도 불리함도 없는 일반 굴림), "advantage", "disadvantage" 중 하나다. 마지막으로 셋째 줄은 추가 보너스/패널티 주사위의 개수 kk(0≤k≤50 \le k \le 5)로 시작한다. 이어서 kk개의 주사위 설명이 주어지며, 각각 "[+-]d$x$"(3≤x≤103 \le x \le 10인 정수) 형태로, xx면체 주사위의 결과를 결과에 더하거나("+"인 경우) 빼라는("-"인 경우) 뜻이다.

출력

주어진 매개변수로 민첩 내성 굴림이 성공할 확률을 나타내는 수 하나를 출력한다. 이 수의 절대 오차는 10−610^{-6} 이하여야 한다.

예제3

  1. 예제 1

    입력
    12 4
    straight
    0
    
    예상 출력
    0.65
    
  2. 예제 2

    입력
    10 3
    advantage
    0
    
    예상 출력
    0.91
    
  3. 예제 3

    입력
    20 7
    disadvantage
    2 +d6 -d4
    
    예상 출력
    0.212916667