AT_tkppc3_j.円の重なり
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
配点:1300点
这是一道交互式问题。
平面上有 N 个圆,这些圆的中心坐标都是整数值,x 和 y 的范围在 −1 000 到 1 000 之间。而这些圆的半径在 200 到 1 000 的整数之间。
新生 PAKEN 君想弄清楚所有圆的信息,但目前他只知道圆的数量 N。他可以向 E869120 询问以下问题:
- 问某个坐标 (p,q) 被多少个圆覆盖。坐标是在圆的边界上也算作被覆盖。坐标 p 和 q 需满足 −5 000≤p,q≤5 000,可以是小数。
请帮 PAKEN 君设计一个程序,让他尽可能少地询问就能确定所有圆的信息。
输入与输出格式
注意:这是交互式问题,输入输出格式与常规问题不同。
-
首先,你将接收到如下输入:
N
其中 N 是平面上圆的个数。
-
接下来,你需要进行询问。为此,你需要输出如下格式:
? p q
用空格隔开的
?、p 和 q 表示询问坐标 (p,q) 被多少个圆包含。p,q 可以是小数,绝对值不得超过 5,000。 -
对于每次询问,裁判程序会返回一个整数 R,表示坐标被多少个圆包含:
R
每次获得答案后,你可以继续询问或直接作答。
-
当你已经确定所有圆的信息时,你需要停止询问并输出答案。答案格式如下:
! x1 y1 r1 x2 y2 r2 ... xN yN rN
其中 (xi,yi) 是第 i 个圆的中心,ri 是第 i 个圆的半径。
输出答案时,需要第一行输出
!,从第二行起输出每个圆的信息,具体需要按照圆心的 x 坐标升序输出;若 x 相同,则按 y 升序排列。
说明/提示
- N 的范围是 1 到 20。
- 圆的坐标和半径在题目中已给定的限制范围之内。
- 每个测试用例中的圆都是在这些约束下随机生成的。具体来说,圆的中心坐标均匀随机选自 (−1000,−1000) 到 (1000,1000) 的 4004001 种组合,半径则在 200 到 1000 之间的 801 种可能中随机选择。
注意
- 如果输出格式不正确,结果可能无法预测(不一定会返回
WA)。 - 输出时必须刷新缓冲,否则可能会因超时而失败。
- 询问次数不允许超过 50,000 次。
子任务 / 得分
子任务 1 [200 分]
- N=1。
- 共计 10 个测试用例,若在不超过 50,000 次询问中完成,可以得满分。
子任务 2 [1100 分]
- N=20。
- 共计 20 个测试用例,全部在 50,000 次查询内完成即可得分,根据询问次数多少,得分可能会有所调整。
假设最难的一个用例询问了 L∗ 次,得分如下:
- 25,001≤L∗≤50,000 时,得 200 分。
- 9,001≤L∗≤25,000 时,得 280 分。
- 3,001≤L∗≤9,000 时,得 350 分。
- 2,001≤L∗≤3,000 时,得 450 分。
- 601≤L∗≤2,000 的情况下,得 300+⌊L∗480000⌋ 的十分位取整分数。
- L∗≤600 时,得满分 1100 分。
输入输出示例
假设 N=2,一个圆的中心为 (4,7),半径为 2;另一个圆的中心为 (3,8),半径为 3。下面是交互过程的一个示例:
输入输出说明:
首先输入 N = 2,���示有两个圆。
接着进行询问:
? 0 0,裁判返回0,说明点 (0,0) 不在任何圆内。? 4 6.5,裁判返回2,说明点 (4,6.5) 在两个圆内。? 1.5 10,裁判返回1,说明点 (1.5,10) 在一个圆内。
确定圆的信息后进行输出:
!
3 8 3
4 7 2
表示有两个圆,分别是中心坐标 (3,8) 半径 3 和中心坐标 (4,7) 半径 2。特别注意,最后输出按照中心坐标 x 较小的先输出,如果 x 相同则按 y 升序。
本翻译由 AI 自动生成
输入解题思路,AI测评打分。不知道怎么写?