题目描述:
有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。
思路:
这道题刚开始不知道该怎么做,但是后来想了想发现这道题有个简单的做法:
以激光枪为坐标系原点,记录每个恐怖分子的斜率,最后排个序就做完了。
这样就有两种情况:
- x轴为0,就定义成一个大数。
- 否则就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了。