페이지를 불러오는 중…
해결한 사람
1
명
정답률
100.00
%
시간 제한
30000
ms
메모리 제한
1024
MB
온라인 포커 웹사이트를 만들고 싶다. 이러한 시스템에서 매우 중요한 구성 요소는 난수 생성기이다. 난수 생성기는 빠르고 충분히 무작위적이어야 한다. 내가 생각해 낸 절충안은 다음과 같다. 길이가 최대 D인 난수를 생성할 방법이 필요하다. 내 계획은 소수 P를 선택하는 것이다. ≤ . 또한 음이 아닌 정수 A와 B를 고를 것이다. 마지막으로, 0 이상 P-1 이하인 정수 시드 S를 고를 것이다.
의사 난수 수열을 출력하기 위해, 먼저 S를 출력한 다음 S의 새로운 값을 다음과 같이 계산한다:
S := (A*S + B) mod P.
그런 다음 S의 새로운 값을 수열의 다음 수로 출력하고, 같은 공식을 사용하여 S를 다시 갱신한다. 이를 원하는 만큼 반복할 수 있다.
이것이 좋은 난수 생성기라고 생각하는가? 내 난수 생성기로 생성된 수열에서 연속한 K개의 원소를 입력받아 수열의 다음 원소를 출력하는 프로그램을 작성할 수 있는가?
시간 제한: 테스트 세트당 30초. 메모리 제한: 1GB. 1 ≤ T ≤ 100. 1 ≤ K ≤ 10. K개의 정수는 위에서 설명한 유형의 난수 생성기가 생성한 수열의 연속한 원소로 주어진다.
1 ≤ D ≤ 4.
1 ≤ D ≤ 6.
입력의 첫 번째 줄에는 테스트 케이스의 수 T가 주어진다. 이어서 T개의 테스트 케이스가 주어진다. 각 테스트 케이스는 D와 K를 포함하는 한 줄로 시작한다. 다음 줄에는 위에서 설명한 종류의 난수 생성기가 생성한 연속한 K개의 원소가 주어진다.
각 테스트 케이스마다 "Case #x: y"를 포함하는 한 줄을 출력한다. 여기서 x는 테스트 케이스 번호이며 (1부터 시작한다), y는 수열의 다음 수이거나 답이 모호한 경우 문자열 "I don't know."이다.
3
2 10
0 1 2 3 4 5 6 7 8 9
3 1
13
1 5
6 6 6 6 6
Case #1: 10
Case #2: I don't know.
Case #3: 6
Copyright Google LLC; sourced from the Google Coding Competitions Archive.
로그인 상태를 확인하는 중입니다.