2025年苏州大学计算机保研机试真题
本文整理苏州大学计算机保研机试真题,并提供详细解析与代码实现,帮助同学们了解保研机试的难度与题型分布
坐标点圆密度计算
坐标点圆覆盖与点密度计算
题目描述
给定一行整数序列,依次将相邻两个整数作为一对,构造二维坐标点。
例如:输入序列
12 34 53 25 61 28 78
可得到 6 个坐标点:
$$
(12,34),\,(34,53),\,(53,25),\,(25,61),\,(61,28),\,(28,78)
$$
定义以每个点为圆心的圆,半径取为该点与下一个点之间的欧氏距离。最后一个点的半径取与第一个点的距离。
- 若点 $P_i=(x_i,y_i)$,点 $P_{i+1}=(x_{i+1},y_{i+1})$,则圆心为 $P_i$,半径为:
$$
r_i=\sqrt{(x_{i+1}-x_i)^2+(y_{i+1}-y_i)^2}
$$
- 对最后一个点 $P_n$,半径为:
$$
r_n=\sqrt{(x_1-x_n)^2+(y_1-y_n)^2}
$$
定义 包含关系:若某点 $Q$ 满足 $\text{dist}(Q,P_i)\le r_i$,则认为该点落在圆 $C_i$ 内(边界算内)。圆心自身一定被包含。
每个圆的点数:圆内(含边界)坐标点的个数。
每个圆的点密度:
$$
\text{density}_i = \frac{\text{count}_i}{\pi r_i^2},\quad \pi=3.14
$$
输出要求
请计算所有圆的点密度,并输出点密度值最大的前 5 个圆(若不足 5 个圆则全部输出)。
-
排序规则:
-
按点密度从大到小排序;
-
若点密度相同,则按包含点数从大到小;
-
若仍相同,则按圆心在输入序列中出现的先后顺序。
-
输出格式:每行一个圆,格式如下:
```
(x, y) c ddd.dd
```
其中:
-
(x, y)为圆心坐标,逗号后有一个空格; -
c为整数,表示该圆包含的点数; -
ddd.dd为点密度,四舍五入保留 6 位小数,不足两位补零; -
各字段间仅一个空格,不得输出额外文字、表头或空行。
输入格式
- 输入仅一行,为若干整数(≥2),以空格分隔。
输出格式
- 至多 5 行,每行满足上述格式。
边界说明
- 若输入整数少于 2 个,无法构成坐标点,输出为空。
- 若某圆半径为 0(相邻点相同),定义其点密度为 0;包含点数按“≤半径”计算(至少包含圆心一个)。
- 计算包含关系时建议使用平方比较并加微小误差避免浮点误差。
- 排序时比较密度用真实值,输出时才四舍五入。
样例
输入:
12 34 53 25 61 28 78
输出:
(12, 34) 4 0.10
(34, 53) 3 0.08
(53, 25) 4 0.07
(25, 61) 2 0.06
(61, 28) 3 0.05