atcoder#AGC044D. [AGC044D] Guess the Password

[AGC044D] Guess the Password

配点 : 11001100

問題文

これは対話式の問題です。

あなたの課題は、秘密のパスワード SS を当てることです。 パスワードは長さ LL 以下の空でない文字列であり、パスワードの各文字は英小文字 (a, b, ..., z)、英大文字 (A, B, ..., Z)、数字 (0, 1, ..., 9) のいずれかです。

秘密のパスワード SS を当てるために、クエリを送ることができます。 クエリは、上述のパスワードの要件を満たす文字列 TT からなり、送られたクエリに対しては SSTT の編集距離 (考慮する操作は文字の削除、挿入、置換) が回答されます。 送ることができるクエリの数は QQ 個までです。

注記: 編集距離 (考慮する操作は文字の削除、挿入、置換) の定義については、Wikipedia 内のこちらのページ

を参照してください。

制約

  • L=128L = 128
  • Q=850Q = 850
  • 秘密のパスワード SS は、プログラムとジャッジの対話の開始前に選ばれる。

入出力

クエリを送るには、標準出力に以下のように出力せよ (末尾に改行を入れること)。

? T

ここで、文字列 TT はパスワードの要件を満たさなければならない。

クエリへの回答 ansans は、標準入力から以下の形式で与えられる。

ans

秘密のパスワード SS を特定したら、標準出力に以下のように出力せよ (末尾に改行を入れること)。

! S

そして、すぐにプログラムを終了させよ。

判定

  • 出力のたびに標準出力を flush せよ。 これが守られない場合、ジャッジ結果が TLE となる可能性がある。
  • 秘密のパスワード (とあなたが考えるもの) を出力したら、直ちにプログラムを終了させよ。これが守られない場合のジャッジ結果は未定義である。
  • 不正な形式のクエリが送られた場合 (例: 送られた文字列がパスワードの要件を満たさない、出力の先頭に ? がない)、プログラムが異常終了した場合、または QQ 回を超えてクエリが送られた場合のジャッジ結果は未定義である (WA とは限らない)。

入出力例

以下の例において、秘密のパスワードは Atcod3rIsGreat です。

Input Output
? AtcoderIsBad\texttt{? AtcoderIsBad}
55
? AtcoderIsGreat\texttt{? AtcoderIsGreat}
11
! Atcod3rIsGreat\texttt{! Atcod3rIsGreat}