P15054 [UOI 2023 II Stage] Square or rectangle
题目背景
双倍经验:
题目描述
Eolymp 邀请你与评测系统玩一个有趣的交互式游戏“正方形还是矩形”。
Eolymp 拥有一个大小为 $100 \times 100$ 单元格的正方形棋盘。棋盘的行从上到下用 $1$ 到 $100$ 的整数编号,列从左到右用 $1$ 到 $100$ 的整数编号。因此,位于棋盘左上角的单元格坐标为 $(1,\,1)$;位于棋盘右下角的单元格坐标为 $(100,\,100)$;位于第 $i$ 行与第 $j$ 列交汇处的单元格坐标为 $(i,\,j)$。
Eolymp 在棋盘上涂了一个矩形区域,其左上角坐标为 $(x_1,\,y_1)$,右下角坐标为 $(x_2,\,y_2)$。Eolymp 对这些坐标保密。但已知涂色区域的面积至少是整个棋盘面积的 $4\%$。
你可以向 Eolymp 询问任何单元格(它是否属于涂色区域),并从评测系统得到一个诚实的回答。你需要确定涂色区域是否是一个正方形。
:::align{center}

:::
### 交互方式
要查询一个单元格是否属于涂色区域,你需要向 Eolymp 询问。为此,你需要输出字符 "?" 和两个整数 $x$ 与 $y$($1 \le x \le 100, \; 1 \le y \le 100$)——你想要询问的点的坐标。之后,你需要输出换行符并执行 $\tt{flush}$ 操作。然后,你需要读取一行。Eolymp 将输出 $\tt{inside}$(如果单元格被涂色)或 $\tt{outside}$(否则)。
- C++ 中使用 $\tt{fflush(stdout)}$ 或 $\tt{cout.flush()}$;
- Java 中使用 $\tt{System.out.flush()}$;
- Pascal 中使用 $\tt{flush(output)}$;
- Python 中使用 $\tt{stdout.flush()}$;
- 其他语言请自行查阅文档。
你最多可以询问 $10\,000$ 次。
当你得知答案时,你需要输出字符 "!"、一个空格,以及两个选项之一:要么是 $\tt{square}$(如果 Eolymp 涂的图形是正方形),要么是 $\tt{rectangle}$(如果是矩形)。
如果你不遵守交互格式,可能会收到任何判题结果:$\tt{Wrong\ Answer}$、$\tt{Runtime\ Error}$、$\tt{Time\ Limit\ Exceeded}$ 等。
输入格式
无
输出格式
无
说明/提示
在示例中,Eolymp 涂色的区域左上角为 $(20, 20)$,右下角为 $(80, 80)$。
题目描述中提供了一个与 Eolymp 交互的示例。你对 Eolymp 的查询可以不同。
你的程序将与 Eolymp 多次进行此游戏。设 $q$ 为你在所有游戏中询问的最大问题数。那么你将获得如下分数:
- 如果你在任何一场游戏中询问超过 $10\,000$ 次、给出错误答案或不遵守交互格式,你将获得 $0$ 分。
- 如果 $1\,000 < q \leq 10\,000$,你将获得 $5$ 分。
- 如果 $100 < q \leq 1\,000$,你将获得 $19$ 分。
- 如果 $50 < q \leq 100$,你将获得 $20 + \lfloor\frac{(100 - q) \cdot 30}{50}\rfloor$ 分。
- 如果 $33 < q \leq 50$,你将获得 $50 + \lfloor\frac{(50 - q) \cdot 50}{17}\rfloor$ 分。
- 如果 $q \leq 33$,你将获得 $100$ 分。
翻译由 DeepSeek V3 完成