今日头条2018笔试题1 二维平面最大整数点集

这篇博客探讨了一道今日头条2018年笔试题,涉及二维平面上寻找‘最大’整数点集的问题。所谓‘最大’点是指在给定的二维整数点集中,没有任何点位于该点的右上方区域。通过按Y轴降序排列并检查相邻点的X坐标,可以找到所有满足条件的点,并按X轴升序输出。

题目

P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)

如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。

输入描述:

第一行输入点集的个数 N, 接下来 N 行,每行两个数字代表点的 X 轴和 Y 轴。

输出描述:

输出“最大的” 点集合, 按照 X 轴从小到大的方式输出,每行两个数字分别代表点的 X 轴和 Y轴。

输入例子1:

5
1 2
5 3
4 6
7 5
9 0

输出例子1:

4 6
7 5
9 0

思路:

对y轴从大到小排序,然后记录输出的点的x轴,若下一点的x大于刚输出点的x则也为最外围点。
 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
struct point{
    int x,y;
};

bool cmp(point a,point b){
    return a.y>b.y;
}
point p [500001];
//point result  [500001];

int main(){
&nbs
### Python 实现判断二维平面与圆的位置关系 要实现这一功能,可以通过计算每个到圆心的距离并与半径进行比较来完成。具体来说: 1. 如果某个 \( (x_i, y_i) \) 到圆心 \( (cx, cy) \) 的距离小于等于半径 \( r \),那么该位于圆内或边界上。 2. 否则,该位于圆外。 以下是具体的算法实现代码[^6]: ```python import math def point_in_circle(points, circle_center, radius): """ 判断中的每一个相对于指定圆的位置关系 :param points: list[tuple], 平面内的 [(x1, y1), (x2, y2)...] :param circle_center: tuple, 圆的中心坐标 (cx, cy) :param radius: float, 圆的半径 :return: dict, 返回字典 {point: relation},relation 取值为 'inside', 'on_boundary' 或 'outside' """ result = {} cx, cy = circle_center # 获取圆心坐标 for px, py in points: distance_squared = (px - cx)**2 + (py - cy)**2 # 计算平方距离以节省开方运算时间 if distance_squared < radius**2: result[(px, py)] = 'inside' # 在圆内 elif abs(distance_squared - radius**2) < 1e-9: # 浮数精度考虑 result[(px, py)] = 'on_boundary' # 在圆周上 else: result[(px, py)] = 'outside' # 在圆外 return result # 示例调用 points_example = [(0, 0), (3, 3), (-1, -1)] circle_center_example = (0, 0) radius_example = 5 result_dict = point_in_circle(points_example, circle_center_example, radius_example) for point, relation in result_dict.items(): print(f"Point {point}: {relation}") ``` 上述代码通过遍历并逐一计算它们与圆的关系得出最终结果。注意这里采用了浮误差容忍机制 `abs(distance_squared - radius**2) < 1e-9` 来应对可能存在的数值不稳定情况[^7]。 #### 复杂度分析 对于大小为 \( n \) 的以及固定参数的单个圆而言,此方法的时间复杂度为 \( O(n) \)[^8]。这是因为我们只需对每个执行一次简单的数学运算即可得到结论。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值