#P1045. 秘密

秘密

题目背景

晓山瑞希有秘密。

题目描述

这是一道交互题。

晓山瑞希心里有一个 正整数 kk,你的目标是猜出这个正整数。

晓山瑞希心里还有一个集合 SS,初始时为空。每次操作,你可以向集合中加入一个之前不存在的 正整数 或删除一个已经存在的数。晓山瑞希会在每次操作后告诉你,现在是否存在两个数 x,ySx, y \in S 使得 xy=kx - y = k

交互格式

你的代码需要包含头文件 grader.h

你需要实现一个函数 int guess();,该函数可以调用以下两个函数,并返回你猜的正整数 kk

  • bool add(int x);:向集合 SS 中加入一个正整数 xx。你需要保证 xx 没有出现过,并且 1x1091 \le x \le 10 ^ 9。当其返回 11 时表示操作后存在两个数 x,ySx, y \in S 使得 xy=kx - y = k,否则不存在。
  • bool del(int x);:从集合 SS 中删除一个正整数 xx。你需要保证 xSx \in S。当其返回 11 时表示操作后存在两个数 x,ySx, y \in S 使得 xy=kx - y = k,否则不存在。

guess() 函数返回时不要求集合 SS 为空。

在单个测试点中有多组数据,记得在每次调用 guess() 时清空数组。

评分规则

本题只有一个测试点。保证 1k<7411 \le k < 741,数据组数小于等于 30003000

如果在这一个测试点的任何一组数据上你回答了错误的答案,或是进行了错误的函数调用,你将得到 00 分。

记你在单组数据上调用的 adddel 次数之和为 AA,记 cc 为该测试点所有数据的 AA 的最大值,那么你的得分由以下函数决定:

$$f(c) = \begin{cases} 0 & c > 741 \\ 5 & c = 741 \\ 20 & c = 740 \\ \lfloor 20 + 20 \cdot \frac{(740 - c)^2}{(740 - 400)^2}\rfloor & 400 \le c < 740\\ \lfloor 40 + 30 \cdot \frac{(400 - c)^2}{(400 - 150)^2}\rfloor & 150 \le c < 400\\ \lfloor 70 + 20 \cdot \frac{150 - c}{150 - 77}\rfloor & 77 \le c < 150\\ 93 & c = 76 \\ 96 & c = 75 \\ 100 & c \le 74 \\ \end{cases} $$

样例交互库

【输入格式】第一行一个整数 TT,表示数据组数。接下来 TT 行,每行一个整数 kk

【输出格式】交互库最后会输出一个整数 cc,表示该测试点所有数据调用 adddel 次数之和的最大值。如果你猜错了,会输出 1000000000

交互库使用说明:将 grader.h 放在和你的代码同一个目录下,然后在你的代码中包含 #include "grader.h",即可直接编译运行你的代码。

时空限制

保证你至少可以使用 1s 时间和 256MB 内存。