B - くるくる寿司 Editorial

Time Limit: 15 sec / Memory Limit: 1024 MB

背景

Xはある回転寿司屋で一人で寿司を握っています。

今日はXの知人QQ人が、回転寿司屋に訪れて食事をします。Xは知人の顔を知らず、さらに客が見えない場所にいますが、知人はSNSに自分の食べる寿司の写真を逐一アップロードするので、Xはそれを見ることで、知人の座っている席をだいたい特定したいと考えました。知人はMM回写真をアップロードします。

Xは、特定したい知人に関係無く、決まった長さNNの寿司の列を流し続けます。ii番目の知人が着席した瞬間、その目の前には寿司列のstartistart_i番目の寿司が来るとします(この寿司を知人が取るとは限りません)。

また、Xはすでにいる他の客を何人か追い出すことで、それぞれの寿司が知人によって取られる確率を操作することができます。

もちろん客を追い出すと店の評判が落ちるので、寿司列をうまく決め、できるだけ評判が落ちないように知人の位置を特定してください。

問題文

この問題はインタラクティブです。NNが与えられるので、長さNNの文字列SSと、実数DDを決めてください。ジャッジはS, DS,\ DからQQ個のクエリqiq_iを生成します。 ii番目のクエリに対し、ジャッジがstartistart_iを、0以上N未満の整数から一様乱数にしたがって選びます。このとき文字列qiq_iは以下の擬似コードにより決定されます。

qi=""q_i = ""
for (pos = startistart_i; qiq_i.length < M; pos++)
    確率 1.0/D1.0 / D で、qiq_i の末尾に S[pos%N]S[pos \% N] を付け足す
return qiq_i

iiについてstartistart_iを推定してください。

各テストケースの得点および、この問題の得点は、次のように計算されます。

  • iiについて、startistart_iの推定値をguessiguess_iとしたとき、スコアscoreiscore_iは以下の数式により計算されます。 \begin{aligned} distance_i &= \min\left(\left| guess_i-start_i\right|, N-\left| guess_i-start_i\right|\right),\\ score_i &= \sqrt{D} * \exp(-distance_i^2/25.0)\end{aligned}
    • y=exp(x2/25)y=exp(-x^2/25)は以下のようなグラフになります。
      y=exp(-x^2/25)
  • 1個のテストケースの得点は、各iiのスコアの合計を小数点以下切り上げした値になります。
  • テストケースは全部で10個あります。各テストケースの得点の合計が、この問題の得点になります。
  • なお、スコアの計算に用いられる変数は64ビットの浮動小数点数表現なので、微小な誤差が発生することをご理解ください。

入出力

入力は以下の形式で標準入力から与えられます。

初めに、以下のような入力が与えられます。

NN MM QQ
  • NNSSの文字数を表す整数で、N=3000N = 3000 を満たします。
  • MMqiq_iの文字数を表す整数で、M=7M = 7 を満たします。
  • QQ はクエリの個数を表す整数で、Q=30000Q = 30000 を満たします。

この入力に対し、SSDDを以下の形式で出力してください。

SS
DD
  • SSは長さNNの文字列で、半角英小文字からなります。
  • DD1.01.0以上10.010.0以下の実数です。

その後、以下のような入力が与えられます。

q0q_0
q1q_1qQ1q_{Q-1}
  • qiq_i は、MM文字の文字列です。

qiq_iに対し、guessiguess_iを以下の形式で出力してください。

guess0guess_0
guess1guess_1guessQ1guess_{Q-1}
  • guessiguess_i は、0guessi<N0≤ guess_i< N を満たす整数です。
  • 出力を終えたら、プログラムを終了してください。
  • 出力の後には必ず改行し、flush してください。
  • ジャッジプログラムの都合上、QQ個のqiq_iをすべて読み取った後にguessiguess_iの出力を始めてください。

入出力例

プログラムへの入力 プログラムの出力 説明
13 7 2
N=13, M=7, Q=2N=13,\ M=7,\ Q=2が与えられます。この値はテストケースの制約を満たさないことに注意してください。
nosushinolife
1.8
S=S=nosushinolife, D=1.8,\ D=1.8を出力します。SSの文字数はN=13N=13です。
osushin
nolifos
q0, q1q_0,\ q_1が生成され、与えられます。長さはそれぞれM=7M=7です。
1
7

guess0, guess1guess_0,\ guess_1 を出力します。これらは00以上NN未満でなければなりません。

start0=1, start1=0start_0=1,\ start_1=0であった場合、スコアは、

distance0=min(abs(11), Nabs(11))=0,distance_0 = min(abs(1-1),\ N - abs(1-1)) = 0,

score0=sqrt(D)exp(02/25.0)score_0 = sqrt(D) * exp(-0^2/25.0)1.341641,1.341641,

distance1=min(abs(70), Nabs(70))=6,distance_1 = min(abs(7-0),\ N - abs(7-0)) = 6,

score1=sqrt(D)exp(62/25.0)score_1 = sqrt(D) * exp(-6^2/25.0)0.3178720.317872

のように計算され、このケースの得点は、

score0+score1score_0 + score_11.6595131.659513を小数点以下切り上げして22点となります。


テスター

テスターを次のリンクから提供しています。

テスター



2025-04-03 (Thu)
18:31:02 +00:00