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

题目描述:

有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了。

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 岁月 设计师: pinMode
应支付0元
点击重新获取
扫码支付

支付成功即可阅读