#SPJINT1B. 图灵测试
图灵测试
背景
这题本来是 2023.10.28 新生赛 4 的 A 题。
来自 Ocean 的介绍:所谓 "交互",就是做题者和评测系统之间的对话。在确定答案之前,你输出的每一份符合格式的内容都代表你向评测机发起了一次 询问,评测机会以输入的形式给出符合题意的回复。然后你只需按照题目所给信息,判断 是否已经得出答案 或者 还需继续询问 即可。当然,你需要满足某些题的特定需求,比如说询问次数不可以超过 。
来自 洛谷 的介绍:交互题 即用户提交程序,通过出题人提供的交互库,与判题程序(SPJ)进行交互并获得输入、解答问题。
注意,请在输出之后,加一行 。
下面给出 的输出方式:
-
printf("! 233"); fflush(stdout);
-
cout << "!" << 233 << '\n'; cout.flush();
-
System.out.println("! 233"); System.out.flush();
-
print("! 233") stdout.flush()
说明
如你所见,Ocean 最近在捣鼓对 OJ 的爬虫,并进行的很顺利。
可是,并不是所有网站都是那么好爬的,比如说接下来的这个带有 "图灵测试" 的网站。
为了防止出现技术化的描述,本题只给出具体的说明,你可以自行脑补:
- 首先,网站会给 Ocean 一个序列 ,用于校验;
- 然后,Ocean 需要给网站一个运算符,为
+
,*
这两个运算符的任意一个,代表询问; - 接着,网站会给出一个式子,格式为 数字 + Ocean给出的运算符 + 数字。比如说,如果 Ocean 给了网站
*
,且式子的两个数字分别为12
,24
,那么网站给出的式子是12*24
; - 最后,Ocean 需要校验式子的合法性。定义如果式子中的两个数字都在一开始给定的序列 中,那么式子合法。如果合法,那么 Ocean 会给网站式子的结果,否则 Ocean 会给网站一个
-1
。
你可以帮 Ocean 完成这个简单到让龟神小脑萎缩的流程操作么?
交互
本题有多组测试用例。
首先,你需要读入一行整数 ,代表测试用例的数量。
接下来,对于每个用例,你需要先读入两行内容:
- 第一行给定一个整数 ,代表序列 的长度;
- 第二行给定 个数字,第 个数字代表 。
然后,对于询问,你需要按照 ? c
的格式输出,其中 c
为你需要输出的运算符。具体来说,你只能输出 ? +
,? *
的其中一个。
- 在输出之后,你需要读入一个字符串 。如果 为
ok
,那么代表检查合法,你可以继续接下来的操作;否则代表输出不合法,此时 你必须立即终止你的程序,以得到Wrong Answer
判定,否则你将会得到除Accepted
之外的其他任意评测结果,诸如Runtime Error
。
接着,你需要读入一个字符串,代表网站给出的式子。
最后,对于回答最终的结果,你需要按照 ! x
的格式输出,其中 x
为你的答案。
具体来说,如果你判断其合法,并且算出答案为 36
,你需要输出 ! 36
;如果你判断其不合法,你需要输出 ! -1
。
- 在输出之后,你需要读入一个字符串 。如果 为
ok
,那么代表答案正确,你可以继续接下来的操作;否则代表答案错误,此时 你必须立即终止你的程序,以得到Wrong Answer
判定,否则你将会得到除Accepted
之外的其他任意评测结果,诸如Runtime Error
。
如果你的输出格式有问题,或者你没有在输出后 ,你将会得到 Rumtime Error: Killed
。
如果你还是不知道怎么交互,可以开翻译阅读一下 codeforces
的官方介绍:
Interactive Problems: Guide for Participants - Codeforces
样例
样例输入1
2
5
12 24 3 4 5
ok
12*24
ok
3
1 2 3
ok
1*9
ok
样例输出1
? *
! 288
? *
! -1
第一组样例的解释已在题面中给出。
提示
保证所有样例的 总和不超过 。