luogu#B3775. [信息与未来 2022] Mathler(暂无交互库)
[信息与未来 2022] Mathler(暂无交互库)
题目描述
风靡全球的猜单词游戏有了数学版本!在这个游戏中,计算机会秘密产生一个隐藏的表达式,例如 。但计算机不会把具体的表达式告诉你,而是只把表达式的计算结果(在前面的例子中是 )告诉你。接下来,你需要用尽可能少的次数把这个表达式猜出来!
你可以和计算机多次互动完成猜测。在游戏的每一轮中,你都可以告诉计算机一个长度是 的字符串表达式,仅由数字 和四则运算 构成,表达式中不含负数且数字不包含前导零,并且表达式的计算结果必须是游戏开始时给出的数值(在我们的例子中是 )。计算机收到你猜测的表达式后,会对你给出表达式中每一个字符分别给出反馈:
- 绿色:这个字符出现在隐藏表达式中,且位置正确;
- 黄色:这个字符出现在隐藏表达式中,但位置不正确;
- 灰色:这个字符没有出现在隐藏表达式中。
下面是一个三次猜中隐藏表达式的例子:
在你猜了很多次以后,觉得这个游戏已经有些无聊了。现在你希望编一个程序,让你的程序代替你在 次猜测之内得到隐藏的表达式。
输入格式
本题为交互题,评测时会模拟键盘输入并读取程序的屏幕输出。首先,评测程序会在键盘输入一行一个整数 ,代表隐藏表达式的计算结果,然后进入交互模式并等待你的程序输出一行(对隐藏的表达式进行猜测)。评测程序读取到你屏幕上的输出后,会及时用键盘输入的方式给出反馈。以下 C++ 代码片段可以实现与评测程序的交互(你需要补全其他必要的内容):
cin >> n; // int n;
while (true) {
cout << guess(n) << endl; // 作出⼀次猜测,注意需要输出⼀个换⾏
cin >> res; // string res; 计算机对猜测的反馈
if (res == "AAAAAA") {
break; // 游戏结束
}
}
在交互过程中,评测程序会及时地对你的输出给出反馈(作为键盘输入给程序):
- 对于不正确的表达式(例如有多余的空格、表达式不合法或值错误等),反馈六个半角减号();
- 对于值正确的表达式,反馈六个字符,其中:
- 表示在表达式中出现且位置正确;
- 表示在表达式中出现且位置不正确;
- 表示在表达式中未出现。
注意隐藏表达式中同一个数字可能多次出现。如果你猜测的表达式中某个数字出现了多次,评测程序会优先给出 的结果,然后从左到右给出 的结果,多余的数字给出 的结果。在 次猜测以内得到 且程序正常终止即被判定为正确。
本题中四则运算规则:先乘除、后加减,同优先级从左到右计算,允许计算过程中出现负数。除法是有理数的除法而非整除,即 的值为 且禁止除零。完整的交互过程应在 秒内完成;评测程序的运行时间很短,可以忽略不计。
输出格式
见输入格式。
36
XXXBXB
------
BAXBAX
AAAAAA
6+3*10
6+3*11
50-2*7
90/5*2
8
BXXXXX
XXXXBX
ABBABX
AAAAAA
10-4+2
7*6-34
3+15/3
35/5+1
提示
样例组 的交互过程对应了题图的交互过程,但中间有一次输入非法表达式的情况。
对于 的数据,隐藏表达式至多只包含两个运算符,且运算符只有加法和减法。
对于 的数据,。保证至少存在一个计算结果等于 的表达式。