#P16231. [2026保加利亚国家扩展队训练赛]Aerobatics特技飞行(提交答案题)
[2026保加利亚国家扩展队训练赛]Aerobatics特技飞行(提交答案题)
当前没有测试数据。
题目描述
比塔罗将参加一场特技飞行比赛。飞机始终保持恒定高度,因此可以把飞行过程看成在平面内进行。
平面上给定 个检查点,编号为 到 。检查点 的坐标为 。
比赛中,飞机必须恰好经过每个检查点一次。比塔罗可以自行选择起点。此后,只要仍有未访问的检查点,他就选择下一个检查点,飞机沿直线从当前检查点飞到该点。飞机到达最后一个检查点后,飞行结束。
因此,飞机的航线是一条折线。在折线的每个内部顶点,也就是除第一个和最后一个检查点之外的每个已访问检查点,飞机都需要改变方向。若该处的夹角很小,转弯就会非常急,飞行也会更加危险。
比塔罗希望让所有内部夹角中的最小值尽可能大。
你会得到用于评分的 6 个固定输入文件。对于每个输入文件,需要给出一个较好的检查点访问顺序。
输入格式
每个输入文件的第一行包含两个整数:
N Z0
其中:
- 为检查点数量;
- 为评分时使用的目标角度,单位为度。
接下来 行,第 行包含两个整数:
Xi Yi
表示检查点 的坐标。
输出格式
对于每个输入文件,输出文件必须恰好包含 行。
第 行输出一个整数 ,表示航线中第 个经过的检查点编号。
必须构成 的一个排列,其中 是起点。
输出文件的提交方式
编号为 xx 的测试,对应输出文件名必须为:
aerobatics.xx.out
测试编号 到 需要补前导零,例如:
- 第 1 个测试:
aerobatics.01.out; - 第 6 个测试:
aerobatics.06.out。
提交时上传一个 ZIP 压缩包,其中可以包含一个或多个输出文件。输出文件必须直接位于压缩包根目录,不能放在子目录中。文件名不符合要求的文件会被忽略。
若某次提交缺少某个测试的输出文件,则该次提交不会改变你在该测试上的已有成绩。对于同一个测试,最终取所有提交中的最好成绩。
数据范围
- ;
- ;
- 不存在两个坐标完全相同的检查点;
- 。
评分方式
若输出不是一个合法排列,或格式错误,则该测试得 分。
对于合法输出,对每个 ,考虑点 处由线段 与 形成的夹角。角度取值不超过 。
设所有 个内部夹角中的最小值为 。
- 若 ,获得该测试的全部分数;
- 若 ,获得该测试分数的以下比例:
其中
六个测试的分值如下:
| 测试 | 输入文件 | 分值 | |
|---|---|---|---|
| 1 | aerobatics.01.in |
15 | 10 |
| 2 | aerobatics.02.in |
200 | 15 |
| 3 | aerobatics.03.in |
||
| 4 | aerobatics.04.in |
1000 | 20 |
| 5 | aerobatics.05.in |
||
| 6 | aerobatics.06.in |
总分为六个测试最终得分之和。
辅助函数
原题提供了 aerobatics.h,其中包含函数:
double GetAngle(int xa, int ya,
int xb, int yb,
int xc, int yc);
该函数计算 的度数,其中:
检查程序使用相同的角度计算公式。你可以在搜索较优输出的程序中直接使用或修改该函数。
样例
输入
7 90
3 1
2 5
0 2
-1 6
-3 1
-1 -4
4 -2
输出
5
3
1
7
6
4
2

该航线的最小内部夹角出现在检查点 ,约为 。由于 ,该输出约能获得该测试 的分数。