【2017.12.02普及组模拟】恐怖分子 题解

本文介绍了一种利用激光武器消灭平面内恐怖分子的算法。通过将激光武器作为坐标原点,记录并排序每个恐怖分子相对于武器的斜率,实现消灭所有目标的最小激光发射次数计算。适用于解决特定类型的目标清除问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

有n个恐怖分子在站在一个平面上,每个恐怖分子都有一个位置坐标位置(x,y)。现在有一个激光武器要用来消灭这些恐怖分子,这个武器所在的位置是(x0,y0),激光武器每发射一次,就可以消灭一条直线上的所有恐怖分子。现在,你的任务是计算最少要动用多少次激光武器,才可以消灭所有的恐怖分子。

输入
第一行是3个整数N和x0,y0,分别表示恐怖分子的数量和武器所在的位置。
接下来N行,每行两个整数表示每个恐怖分子的坐标位置,恐怖分子可能站在相同的位置,但是不可能站在武器的位置上。

输出
输出最少需要使用激光武器的次数。

样例输入
样例输入1:
4 0 0
1 1
2 2
2 0
-1 -1

样例输入2:
2 1 2
1 1
1 0

样例输出
样例输出1:
2
样例输出2:
1

样例1和样例2的情况如图所示:
在这里插入图片描述
数据范围限制
1<=N<=1000,-104<=x0,y0<=104,-104<=x,y<=104

思路:

这道题刚开始不知道该怎么做,但是后来想了想发现这道题有个简单的做法:
以激光枪为坐标系原点,记录每个恐怖分子的斜率,最后排个序就做完了。

这样就有两种情况:

  1. x轴为0,就定义成一个大数。
  2. 否则就a[i]=(v-y)/(u-x)。

翻译成代码就是:

if(u-x==0) a[i]=100000;//u,v表示激光炮,x,y表示敌人
else a[i]=(v-y)/(u-x);

然后排序,
判重,
就OK了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值