QOJ.ac

QOJ

حد الوقت: 2 s حد الذاكرة: 256 MB مجموع النقاط: 100 تفاعلية قابلة للهجوم ✓

#12530. 猜字符串

الإحصائيات

这是一个交互式问题。

Alice 和 Bob 正在玩一个游戏。Alice 选择了一个由小写英文字母组成的字符串 $s$。Bob 可以进行形如 “? $t$” 的询问,意思是“字符串 $t$ 是 $s$ 的子序列吗?”。例如,如果 $s = \text{abc}$,那么对于询问 “? ac”,答案是 “YES”,而对于询问 “? bb”,答案是 “NO”。Bob 询问的所有 $t$ 的总长度不能太大,否则玩家会对游戏感到厌倦。

在任何时候,Bob 都可以声称他知道所选的字符串 $s$,并给出他的猜测。如果他猜对了,他就赢了,否则他就输了。

你的任务是编写一个程序,通过交互进行询问,在保证询问次数不过多的前提下赢得每一场游戏。

输入格式

在交互开始时,你的程序没有任何输入。

在每次 “?” 询问(参考输出格式)之后,会输入一行内容 —— 如果 $t$ 是 $s$ 的子序列,则输入 “YES”,否则输入 “NO”。

已知 $s$ 是一个由小写英文字母组成的非空字符串。$s$ 的长度不超过 $500$。

输出格式

按以下格式,每行输出一个询问描述:

  • “? $t$” 表示询问字符串 $t$ 是否为子序列,
  • “! $t$” 表示提交猜测 $s = t$。在进行此询问后,你的程序必须终止。

“?” 询问中 $t$ 的总长度不得超过 $6 \cdot 10^5$。

请记住在每次询问后刷新输出。

样例

输入 1

YES
NO
NO
NO

输出 1

? a
? b
? c
? aa
! a

说明

样例中的空行仅为了清晰展示交互顺序;实际交互中不会输入空行。

请注意,在给出的样例中,如果只允许使用字母 a、b 和 c,那么这个猜测肯定是正确的;对于原问题,该猜测很可能会被判定为错误,因为存在其他符合所有询问的字符串,例如 “ad”。

如果可以通过删除字符串 $s$ 中的某些字符(可能不删除)得到字符串 $t$,则称 $t$ 是 $s$ 的子序列。不允许改变剩余字符的顺序。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.