#P16534. [Dapc2022]guessing primes
[Dapc2022]guessing primes
题目背景
你的朋友们最近沉迷于一款热门猜词游戏:玩家需要在六次机会内猜出一个五字母单词。
可惜,你并不擅长语言游戏;不过,你的数学水平远胜于朋友们。于是你改玩它的数学版本——Brave Alternative Primes Challenge。在这个游戏中,需要在六次猜测内找出一个隐藏的五位素数。
为了向朋友们证明自己的实力,你决定编写一个程序,使它能够稳定赢下每一局游戏。
题目描述
本题是一道交互题。
每一局中,交互器会预先选定一个隐藏的五位素数,即一个满足
的素数。隐藏素数在这一局内保持不变,交互器不会根据你的询问临时修改答案。
你每次需要输出一个五位素数作为猜测。交互器随后返回一个长度为 的字符串,其中第 个字符对应你猜测数字的第 位:
g(green,绿色):这一位数字及其位置都正确;y(yellow,黄色):这一位数字出现在隐藏素数中尚未匹配的位置,但不在当前这个位置;w(white,白色):这一位数字既没有被标为绿色,也无法再与隐藏素数中的同一数字匹配。
对于重复数字,每个隐藏数字的出现位置最多只能匹配一次。交互器按以下方式生成反馈:
- 先标记所有位置正确的数字为
g,并消耗隐藏素数中对应的出现次数; - 再从左到右检查其余猜测位置:若该数字在隐藏素数尚未匹配的数字中仍有剩余,则标记为
y并消耗一次;否则标记为w。
当交互器返回 ggggg 时,说明本局猜测成功。
交互格式
交互器首先向你的程序发送一行一个整数 :
表示需要进行的游戏局数。
对于每一局:
- 你的程序输出一行一个五位素数,表示本次猜测;
- 立即刷新输出缓冲区;
- 交互器返回一行一个由
w、y、g组成的长度为 的字符串; - 若返回值为
ggggg,当前局结束并进入下一局;否则继续猜测。
每一局最多允许进行 6 次猜测。
以下情况都会得到 Wrong Answer:
- 某一局使用超过 次猜测;
- 输出的数不是五位数;
- 输出的数不是素数;
- 没有按照要求刷新输出缓冲区,导致交互超时;
- 完成全部游戏后继续输出额外内容。
交互示例
下面仅用于展示交互过程,其中:
- 以
<开头的行由交互器发送; - 以
>开头的行由选手程序输出。
< 2
> 54323
< ywyww
> 98737
< wwwyg
> 31583
< gggww
> 31517
< ggggg
> 99991
< wwwwy
> 44449
< wgwgw
> 14143
< ggggg
交互示例不代表固定的隐藏素数,也不限制你必须采用这些猜测。
本地测试
附件中提供:
testing_tool.py:本地交互测试工具;sample.in:一组本地隐藏数据。
例如,若你的 C++ 程序编译为 main,可以使用:
python3 testing_tool.py -f sample.in ./main
本地输入文件的第一行是局数,之后每行给出一局的隐藏素数。该格式只供本地测试工具使用,正式评测时选手程序无法直接读取隐藏素数。
数据范围与评测说明
- 游戏局数:;
- 隐藏答案一定是五位素数;
- 每局最多询问 次;
- 正式数据共 组,整体覆盖全部 个五位素数。