足跡-sokuseki-

りかの日進月歩の記録

AOJ2165 Strange String Manipulation

Strange String Manipulation | Aizu Online Judge

問題概要

線形合同法を使って擬似乱数を生成します。線形合同法
 R_0 = S
 R_i = ( A R_{i-1} + C ) mod  M
で計算します。ここで S, A, C, M は定数で、この問題では  0 \le S, A, C \le 15   M=256です。

いま、文字列  I を、乱数列  R を使って別の文字列  O に変換したいです。文字列  O
 O_i = ( I_i + R_i ) mod  M
で定義されます。
文字列  O エントロピーが最小になるような  S, A, C を答えてください。エントロピーが最小になるような組が複数ある場合は  S, A, C が最小になるものを答えてください。
文字列のエントロピー  H
 H = - \sum_x \frac{\#(x)}{N} \log \frac{\#(x)}{N}
で定義されます。ここで  N は文字列の長さ、 \#(x) はアルファベット  x の出現回数です。

解法

S,A,Cを全探索します。16*16*16*256なので間に合います。
AIZU ONLINE JUDGE: Code Review