• 【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了。

  • 相关阅读:
    如何成为一名专家级的开发人员
    ZapThink探讨未来十年中企业IT的若干趋势
    Adobe CTO:Android将超预期获50%份额
    我的美国之行
    用上Vista了!
    用pylint来检查python程序的潜在错误
    delegate in c++ (new version)
    The GNU Text Utilities
    python程序转为exe文件
    c++头文件,cpp文件,makefile,unit test自动生成器
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13159875.html
Copyright © 2020-2023  润新知