CF2138F.Ode to the Bridge Builder
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给你一个二维平面。初始时,两个点 P1 和 P2 分别位于 (0,0) 和 (1,0),并且两点间有一条线段连接。你可以通过如下操作绘制三角形:
- 选择两个由线段直接连接的点 A 和 B(即 A 和 B 必须是已存在线段的两端点)。
- 选择两个实数 x 和 y,满足 −2⋅104≤x,y≤2⋅104。在坐标 (x,y) 处绘制一个新点 C。然后,绘制线段 AC 和 BC,从而构成三角形 △ABC。
- 新三角形 △ABC 的每条边的长度 l 都必须满足 0.5≤l≤1。
注意,每次操作只绘制一个新点和两条新线段。
你的任务是,使用至多 m=⌈2p2+q2⌉ 次操作,在坐标 (p,q) 处绘制一个点,其中 ⌈x⌉ 表示大于等于 x 的最小整数。保证 p 和 q 都是正整数。
由于可能存在精度误差:
- 构造出的顶点只需距离 (p,q) 不超过 10−4。
- 对于三角形的边长,允许绝对误差 10−8(即 0.5−10−8≤l≤1+10−8)。
注意,目标点可以在最后一次操作之前就已经被创建(见第二个测试用例)。
输入格式
每个测试包含多组测试用例。第一行包含测试用例数 t(1≤t≤1000)。接下来是各个测试用例的描述。
每个测试用例第一行包含三个整数 p,q 和 m(1≤p,q≤104,m=⌈2p2+q2⌉)——即目标点的 x 和 y 坐标,以及最多允许执行的操作数。
保证所有测试用例中 m 的总和不超过 105。
输出格式
对于每个测试用例,输出一个整数 n(0≤n≤m),表示实际使用的操作数。
随后输出 n 行,每行描述一次操作。第 i 次操作输出四个值:两个整数 u,v(1≤u,v≤i+1, u=v),表示选中的两点的编号;随后两个实数 x 和 y(−2⋅104≤x,y≤2⋅104),表示新点的坐标。
编号分配规则如下:
- 点 P1(0,0) 和 P2(1,0) 的编号分别为 1 和 2。
- 第 j 次操作绘制的新点编号为 j+2。
如果存在多种在 m 次操作内到达目标点的有效方案,你可以输出任意一种。
输入输出样例
输入#1
2 1 1 3 3 1 7
输出#1
2 1 2 0.5 0.8660254037844386 2 3 1 1 7 1 2 0.5 0.5 2 3 1.1339745962156 0.5 4 2 1.8660254037844 0.5 4 5 2 1 5 6 2.5 0.5 6 7 3 1 6 7 2.5 1
说明/提示
在第一个样例中,最多可进行 ⌈22⌉=3 次操作,下面的方案只用了两步:
- 选择点 A=P1 和 B=P2,在 (21,23) 处绘制新点 P3。此时三角形 △P1P2P3 的三边均为 1。
- 选择 A=P2,B=P3,在 (1,1) 处绘制新点 P4,此时 △P2P3P4 中 ∣P2P3∣=∣P2P4∣=1,∣P3P4∣=2sin(15∘)≈0.5176≥0.5。

在第二个样例中,最多可进行 ⌈210⌉=7 次操作。
如下图方案中,点 P4 和 P5 的坐标分别为 (2−23,21) 和 (1+23,21),且 ∣P4P6∣=∣P2P5∣=1。可以验证所有线段的长度均在 [0.5,1] 范围内。
注意,最后一次操作其实可以省略,删除最后一步方案依然正确。

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