#P83. [Sleeping Cup #3] Missing circle

[Sleeping Cup #3] Missing circle

负责人

注意

本题需要使用文件读写(circle.in / circle.out)。

题目描述

现有一个 1000×10001000 \times 1000 的平面。现以左下角为原点建立平面直角坐标系,并将右上角的坐标记为 (1000,1000)(1000,1000),则每个点都可以用一个唯一确定的坐标表示。

接下来,小 G 在平面内部画了一个半径不小于 100100圆,然后均匀随机地在平面中选取了 10510^5 个点。

小 G 没有告诉你圆的圆心和半径,你需要猜出它。当然了,小 G 不会让你盲猜,因此他把 10510^5 个点与圆的相对位置(是否在圆内,本题中恰好落在圆上的点按照在圆内处理)告诉了你。

输入格式

10510^5 行,每行两个 33 位小数 x,yx,y 和一个整数 zz(保证 zz 等于 0011,表示一个点的坐标 (x,y)(x,y) 和它与圆的相对位置 zzz=1z=1 表示在圆内,z=0z=0 表示不在圆内)

输出格式

第一行两个实数 x0,y0x_0,y_0 表示圆的圆心 (x0,y0)(x_0,y_0)

第二行一个实数 r0r_0 表示圆的半径。

计分方式

如果出现以下情况,你得 00 分:

  • 程序不能正常运行或输出格式不正确。
  • 不满足 0x0,y0,r010000 \le x_0,y_0,r_0 \le 1000 的要求。

如果没有出现以上情况:

  • 如果你给出的圆心与实际圆心相距不大于 1010 个单位长度,你得 5050 分。
  • 如果你给出的半径与实际半径相差不大于 1010 个单位长度,你得 5050 分。
  • 以上两部分相互独立计分。

下发文件

请在这里下载下发文件。

我们下发了 gen.cpp 作为 Generator,但没有下发样例。

请在编译 gen.cpp 为可执行文件 gen 后使用以下命令生成样例:

  • gen circle.in circle.ans(Windows)。
  • ./gen circle.in circle.ans(Linux)。

官方题解

link