비디오 포커

시간 제한1초메모리 제한128 MB

요약
포커 상금표와 다섯 장의 카드가 주어질 때, 32가지 교체 방법 중 기대값을 최대화하는 선택을 찾아 정확한 분수로 출력합니다.
난이도

보통10점 중 6점

유형
완전 탐색, 조합론, 시뮬레이션, 수학
정답자
아직 제출이 없습니다

문제

비디오 포커는 5장 드로 방식을 바탕으로 한 슬롯머신형 포커이다. 플레이어는 표준 52장 덱에서 무작위로 뽑은 5장의 패를 받는다. 그런 다음 이 중 임의의 장수(0장부터 5장까지)를 버리고, 버린 카드마다 덱에 남은 47장 중에서 무작위로 뽑은 새 카드로 교체할 수 있다. 최종 5장의 패는 아래의 고정된 배당표에 따라 평가되어 보상을 받는다. 흔한 배당표는 다음과 같다.

족보배당
원 페어1
투 페어2
트리플3
스트레이트4
플러시5
풀 하우스10
포 카드25
스트레이트 플러시100
로열 플러시250

배당표의 어느 행과도 일치하지 않는 패(단순 하이 카드)의 보상은 00이다. 배당표가 주어졌을 때, 주어진 시작 패에 대해 어떤 카드를 버릴지 정하여 기대 보상을 최대로 만든다. 이 최대 기대 보상을 구하는 것이 목표이다.

일반적인 포커 족보 순위를 따른다. 카드는 두 글자 토큰 Xs로 표기하며, X는 숫자(2-9, T, J, Q, K, A), s는 무늬(c, d, h, s)이다. 에이스는 가장 높은 카드이지만, 스트레이트 A 2 3 4 5에서는 가장 낮은 카드로도 쓸 수 있다. 로열 플러시는 한 무늬의 T J Q K A 스트레이트 플러시이다.

입력

첫 줄에는 양의 정수 하나, 즉 테스트 케이스의 수(최대 100100)가 주어진다. 각 테스트 케이스는 다음과 같이 구성된다.

  • 아홉 개의 정수 xix_i (0≤xi≤10000 \le x_i \le 1000)가 한 줄에 주어진다. 이는 원 페어, 투 페어, 트리플, 스트레이트, 플러시, 풀 하우스, 포 카드, 스트레이트 플러시, 로열 플러시에 대한 배당을 오름차순으로 나열한 것이다.
  • 정수 nn (1≤n≤101 \le n \le 10) 하나가 한 줄에 주어진다. 이는 시작 패의 개수이다.
  • 이어서 nn개의 줄이 주어지며, 각 줄은 공백으로 구분된 다섯 개의 카드 토큰으로 하나의 시작 패를 나타낸다.

출력

각 시작 패에 대해, 최대 기대 보상을 기약 분수 p/q 형태로 한 줄에 하나씩 출력한다. 여기서 q≥1q \ge 1이고 gcd⁡(p,q)=1\gcd(p, q) = 1이며, 정수 값 vv는 v/1로 출력한다.

기대 보상은 항상 유리수이다. 남길 카드의 집합이 정해지면 보상은 동일한 확률을 갖는 모든 뽑기에 대한 보상의 합을 그 뽑기의 수로 나눈 값이므로, 모든 버리기 선택에 대한 최댓값은 정확한 값을 가지며 이를 분수 p/q로 나타낸다.

예제3

  1. 예제 1

    입력
    1
    1 2 3 4 5 10 25 100 250
    5
    Ah Ac Ad As 2s
    Ks Qs Js Ts 2h
    Ks Qs 2d 2h 3s
    2d 4h 5d 3c 9c
    2h 3h 6d 8h Tc
    
    예상 출력
    25/1
    421/47
    1672/1081
    44/47
    117866/178365
    
  2. 예제 2

    입력
    1
    1 2 3 4 5 10 25 100 250
    1
    Ts Js Qs Ks As
    
    예상 출력
    250/1
    
  3. 예제 3

    입력
    1
    1 2 3 4 5 10 25 100 250
    1
    Ah Kh Qh Jh 3c
    
    예상 출력
    314/47