AT_tkppc3_j.円の重なり

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

配点:1300点
这是一道交互式问题。

平面上有 NN 个圆,这些圆的中心坐标都是整数值,xx 和 yy 的范围在 −1 000-1\ 000 到 1 0001\ 000 之间。而这些圆的半径在 200200 到 1 0001\ 000 的整数之间。

新生 PAKEN 君想弄清楚所有圆的信息,但目前他只知道圆的数量 NN。他可以向 E869120 询问以下问题:

  • 问某个坐标 (p,q)(p, q) 被多少个圆覆盖。坐标是在圆的边界上也算作被覆盖。坐标 pp 和 qq 需满足 −5 000≤p,q≤5 000-5\ 000 \leq p, q \leq 5\ 000,可以是小数。

请帮 PAKEN 君设计一个程序,让他尽可能少地询问就能确定所有圆的信息。

输入与输出格式

注意:这是交互式问题,输入输出格式与常规问题不同。

  1. 首先,你将接收到如下输入:

    NN

    其中 NN 是平面上圆的个数。

  2. 接下来,你需要进行询问。为此,你需要输出如下格式:

    ?? pp qq

    用空格隔开的 ?、pp 和 qq 表示询问坐标 (p,q)(p, q) 被多少个圆包含。p,qp, q 可以是小数,绝对值不得超过 5,0005,000。

  3. 对于每次询问,裁判程序会返回一个整数 RR,表示坐标被多少个圆包含:

    RR

    每次获得答案后,你可以继续询问或直接作答。

  4. 当你已经确定所有圆的信息时,你需要停止询问并输出答案。答案格式如下:

    !! x1x_1 y1y_1 r1r_1 x2x_2 y2y_2 r2r_2 ... xNx_N yNy_N rNr_N

    其中 (xi,yi)(x_i, y_i) 是第 ii 个圆的中心,rir_i 是第 ii 个圆的半径。

    输出答案时,需要第一行输出!,从第二行起输出每个圆的信息,具体需要按照圆心的 xx 坐标升序输出;若 xx 相同,则按 yy 升序排列。

说明/提示

  • NN 的范围是 11 到 2020。
  • 圆的坐标和半径在题目中已给定的限制范围之内。
  • 每个测试用例中的圆都是在这些约束下随机生成的。具体来说,圆的中心坐标均匀随机选自 (−1000,−1000)(-1000, -1000) 到 (1000,1000)(1000, 1000) 的 40040014004001 种组合,半径则在 200200 到 10001000 之间的 801801 种可能中随机选择。

注意

  • 如果输出格式不正确,结果可能无法预测(不一定会返回 WA)。
  • 输出时必须刷新缓冲,否则可能会因超时而失败。
  • 询问次数不允许超过 50,00050,000 次。

子任务 / 得分

子任务 1 [200 分]

  • N=1N = 1。
  • 共计 1010 个测试用例,若在不超过 50,00050,000 次询问中完成,可以得满分。

子任务 2 [1100 分]

  • N=20N = 20。
  • 共计 2020 个测试用例,全部在 50,00050,000 次查询内完成即可得分,根据询问次数多少,得分可能会有所调整。

假设最难的一个用例询问了 L∗L* 次,得分如下:

  • 25,001≤L∗≤50,00025,001 \leq L* \leq 50,000 时,得 200 分。
  • 9,001≤L∗≤25,0009,001 \leq L* \leq 25,000 时,得 280 分。
  • 3,001≤L∗≤9,0003,001 \leq L* \leq 9,000 时,得 350 分。
  • 2,001≤L∗≤3,0002,001 \leq L* \leq 3,000 时,得 450 分。
  • 601≤L∗≤2,000601 \leq L* \leq 2,000 的情况下,得 300+⌊480000L∗⌋300 + \left\lfloor \frac{480000}{L*} \right\rfloor 的十分位取整分数。
  • L∗≤600L* \leq 600 时,得满分 1100 分。

输入输出示例

假设 N=2N = 2,一个圆的中心为 (4,7)(4, 7),半径为 22;另一个圆的中心为 (3,8)(3, 8),半径为 33。下面是交互过程的一个示例:

输入输出说明:
首先输入 NN = 22,���示有两个圆。

接着进行询问:

  • ? 0 0,裁判返回 0,说明点 (0,0)(0, 0) 不在任何圆内。
  • ? 4 6.5,裁判返回 2,说明点 (4,6.5)(4, 6.5) 在两个圆内。
  • ? 1.5 10,裁判返回 1,说明点 (1.5,10)(1.5, 10) 在一个圆内。

确定圆的信息后进行输出:

!
3 8 3
4 7 2

表示有两个圆,分别是中心坐标 (3,8)(3, 8) 半径 33 和中心坐标 (4,7)(4, 7) 半径 22。特别注意,最后输出按照中心坐标 xx 较小的先输出,如果 xx 相同则按 yy 升序。

本翻译由 AI 自动生成

输入解题思路,AI测评打分。不知道怎么写?

首页