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

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

이상한 문자열 조작

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

요약
바이트 문자열이 주어질 때 고정된 LCG의 4096개 매개변수 조합을 모두 살펴보고, 이동 후 출력 문자열의 엔트로피를 최소로 만드는 조합을 출력한다.
난이도

보통10점 중 6점

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

문제

선형 합동 생성기는 다음 수식으로 의사 난수열 R(⋅)R(·)을 만든다:

R(0)=SR(0) = S, R(i)=(A⋅R(i−1)+C) mod MR(i) = (A · R(i - 1) + C) \bmod M (for i=1,2,…i = 1, 2, \dots),

여기서 SS, AA, CC, MM은 모두 매개변수이다. 이 문제에서 0≤S,A,C≤150 \le S, A, C \le 15이고 M=256M = 256이다.

이제 각 문자가 00과 (M−1)(M - 1) 사이의 정수인 입력 문자열 I(⋅)I(·)가 있다. 의사 난수열 R(⋅)R(·)을 이용해 다음 수식으로 출력 문자열 O(⋅)O(·)를 얻는다:

O(i)=(I(i)+R(i)) mod MO(i) = (I(i) + R(i)) \bmod M (for i=1,2,…i = 1, 2, \dots),

출력 문자열 O(⋅)O(·)의 정보 엔트로피가 최소가 되도록 하는 매개변수 SS, AA, CC를 구하는 프로그램을 작성하라. 정보 엔트로피 HH는 다음과 같다:

H = -\sum\_{x}{\frac{\text{#}(x)}{N}\log{\frac{\text{#}(x)}{N}} }

여기서 NN은 문자열의 길이이고 \text{#}(x)는 문자 xx가 나타나는 횟수이다.

입력

입력은 다음 형식으로 주어진다:

NN

I(1)I(2)…I(N)I(1) I(2) \dots I(N)

NN은 256을 넘지 않는다.

출력

세 매개변수 SS, AA, CC의 값을 공백 하나로 구분해 한 줄에 출력한다. 최소 엔트로피를 주는 답이 여러 개라면 SS, AA, CC 순서로 작은 것을 고른다.

예제3

  1. 예제 1

    입력
    5
    5 4 3 2 1
    
    예상 출력
    0 1 1
    
  2. 예제 2

    입력
    5
    7 7 7 7 7
    
    예상 출력
    0 0 0
    
  3. 예제 3

    입력
    10
    186 8 42 24 154 40 10 56 122 72
    
    예상 출력
    8 7 14