Not So Random (Large)
시간 제한10초메모리 제한512 MB
AND, OR, XOR 중 하나를 확률에 따라 K와 적용하는 기계 N개를 직렬로 연결했을 때 마지막 출력의 기댓값을 구합니다.
문제
어떤 "난수 생성기"(RNG)는 음이 아닌 정수 하나를 입력으로 받아 음이 아닌 정수 하나를 출력한다. 그런데 이 기계는 사실 그리 무작위하지 않다. 고정된 수 가 정해져 있고, 매번 다음 세 연산 중 정확히 하나를 수행한다.
- 확률 으로 입력과 의 비트 AND를 반환한다.
- 확률 으로 입력과 의 비트 OR를 반환한다.
- 확률 으로 입력과 의 비트 XOR를 반환한다.
기계는 , , 에 따라 연산을 고르고, 그 선택은 완전히 무작위이며 매번 독립이다.
이런 기계가 개 있다. 한 기계의 출력이 다음 기계의 입력이 되도록 일렬로 연결했다. 첫 번째 기계에 를 넣었을 때 마지막 기계가 내놓는 값의 기댓값을 구하라.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다. 이어지는 개의 줄에 각각 여섯 정수 , , , , , 가 공백으로 구분되어 주어진다. 차례대로 기계의 개수, 처음 입력값, 모든 기계가 비트 연산에 쓰는 고정된 수, 그리고 AND, OR, XOR를 고를 확률에 100을 곱한 값이다.
제한
출력
각 테스트 케이스마다 한 줄에 Case #x: y 형식으로 출력한다. 는 1부터 시작하는 테스트 케이스 번호이고, 는 마지막 기계가 내놓는 값의 기댓값을 소수점 아래 넷째 자리까지 반올림한 값이다. 뒤따르는 0까지 포함해 소수점 아래를 항상 정확히 네 자리로 출력한다.
모든 테스트 케이스에서 정답은 반올림 경계로부터 충분히 떨어져 있다. 배정밀도 실수 연산으로 계산해도 출력이 달라지지 않는다.
힌트
예제의 첫 번째 테스트 케이스에서는 AND나 OR가 일어나면 최종 출력이 5이고 XOR가 일어나면 0이다. 5가 나올 확률은 , 0이 나올 확률은 이므로 기댓값은 이다.
두 번째 테스트 케이스에서는 최종 출력이 확률 로 5이고, 나머지 확률로 0이다.