만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Knockout

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

요약
남은 숫자와 주사위 합이 주어질 때, 합과 같은 부분집합을 골라 남은 숫자로 만드는 최종 수의 기대값을 최소화하거나 최대화합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 비트 연산, 완전 탐색, 수학
정답자
아직 제출이 없습니다

문제

솔리테어 게임 Knockout은 다음과 같이 진행된다. 숫자 1부터 9까지를 오름차순으로 적는다. 각 턴마다 육면체 주사위 두 개를 굴려서 눈의 합을 구하고, 그 합과 같은 합이 되는 숫자들의 집합을 원하는 대로 골라 지운다. 만약 지울 수 없다면 게임이 끝나고, 남은 숫자들을 하나의 수로 읽은 것이 점수가 된다. 지울 수 있다면 주사위를 다시 굴려 게임을 계속한다.

이 게임은 점수를 최소화하거나 최대화하는 방식으로 플레이할 수 있다. 게임의 상태(남아 있는 숫자)와 주사위 눈이 주어졌을 때, 어떤 숫자를 지워야 하는지, 그리고 남은 게임 동안 해당 버전에 맞게 최선의 수를 둔다고 가정할 때 두 버전 각각의 기대 점수가 얼마인지 구하시오. 기대 점수는 가능한 모든 점수에 그 확률을 곱한 값의 합이다(최적 플레이를 가정함).

입력

각 입력은 단일 테스트 케이스로 이루어진다. 프로그램은 서로 다른 입력에 대해 여러 번 실행될 수 있다.

각 테스트 케이스는 한 줄로 이루어지며, 숫자들로 구성된 문자열 d (1 ≤ |d| ≤ 9)와 두 정수 a, b (1 ≤ a, b ≤ 6)가 공백으로 구분되어 주어진다. 문자열 d는 1부터 9까지의 숫자 중 일부를 오름차순으로 포함하며, 같은 숫자가 두 번 나오지 않는다. 이것이 현재 게임 상태이다. 정수 a와 b는 현재 굴린 주사위 눈을 나타낸다.

출력

두 줄을 출력하며, 각 줄은 두 부분으로 이루어진다. 먼저 주사위 눈에 따라 지운 숫자들을 오름차순의 문자열로 출력한다. 만약 어떤 숫자도 지울 수 없다면 -1을 출력한다. 그다음 기대 점수를 소수점 다섯째 자리에서 반올림한 실수로 출력한다. 두 부분 사이에는 공백을 하나 둔다.

첫 번째 줄은 점수를 최소화할 때의 최선의 결과이고, 두 번째 줄은 점수를 최대화할 때의 최선의 결과이다. 서로 다른 숫자 조합이 같은 기대 점수를 낳는 경우는 없다.

예제2

  1. 예제 1

    입력
    1345 1 1
    
    예상 출력
    -1 1345.00000
    -1 1345.00000
    
  2. 예제 2

    입력
    12349 3 1
    
    예상 출력
    13 151.70370
    4 401.24546