#ZT2A. 阿兔与猜拳

阿兔与猜拳

题目描述

这是一个交互式问题。每次输出一行后,必须立即刷新输出缓冲区。例如,在 C++ 中使用 fflush(stdout),在 Java 中使用 System.out.flush(),在 Pascal 中使用 flush(output)

你和阿兔进行一场石头剪刀布比赛。这是一场特殊的比赛,阿兔会先出拳,而你需要在 22 次询问内猜出阿兔出的是什么拳。

交互程序

交互程序首先输出一个整数 t(1t1000)t(1≤t≤1000),表示测试总数。

在每个测试用例中,你的程序需要输出询问或答案:

  • 询问:输出 ? 拳,表示你询问的拳(最多询问 22 次)。
  • 答案:输出 ! 拳,表示你最终猜测阿兔出的拳。
  • 拳只能是 shitou(石头)、jiandao(剪刀)、bu(布)。

交互程序会根据你的询问或答案返回以下响应:

  • 如果你询问的拳与阿兔的拳相同(平局),返回 0
  • 如果你询问的拳能使任一方赢,返回 1
  • 如果你正确猜出阿兔的拳(即输出 ! 拳 且答案正确),返回 2
  • 其他情况(如格式错误、超过询问次数等),交互程序会直接终止并返回 -1 判定答案错误,若你的程序接收到此结果但没有终止,则会判定时间超限等不可预知的错误。
1

0

2

? jiandao

! jiandao

解释 #1

你询问 ? jiandao(剪刀),交互程序返回 0(平局),因此可以确定阿兔出的是 jiandao(剪刀)。

随后你输出正确答案 ! jiandao,交互程序返回 2(答案正确)。