zoukankan      html  css  js  c++  java
  • 导弹拦截(noip2010普及)

    洛谷

    如果用一套系统就拦截了所有导弹,那么这套系统的半径一定是最远的那个

    先算出每个导弹距系统的距离,用某结构体存

    设按距系统1的距离从大到小排

    这时系统1拦截半径为最大的那个数,并且这时拦截了所有导弹

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int i;
        long long x, y;
        long long x1, y1, x2, y2, n;
        long long r=0, ans=0x7f7f7f7f;
        pair<long long, long long>dis[123456];
        cin >> x1 >> y1 >> x2 >> y2 >> n;    
        for (i=1;i<=n;i++)
        {        
            cin >> x >> y;
            dis[i].first = (x - x1) * (x - x1) + (y - y1) * (y - y1);
            dis[i].second = (x - x2) * (x - x2) + (y - y2) * (y - y2);
        }
        sort(dis+1,dis+n+1);    
        /*for(i=1;i<=n;++i)
        {
            printf("%d ",dis[i].first);
            printf("%d 
    ",dis[i].second);
        }    */     
        while (n) 
        {
            ans = min(ans, dis[n].first + (r = max(r, dis[n + 1].second)));
            n--;
            //printf("%d
    ",ans);
        }
        cout << ans << endl;
        return 0;
    }

    然后从大到小历遍导弹

    这时候就有一个反悔机制

    如果发现系统1的最大半径设为当前历遍到的元素加上之前历遍的用系统2拦截的最大半径之和小于之前的答案

    那就更新喽

    显然它合法

  • 相关阅读:
    关于ActionBar的向下兼容
    hdu 4869 Task(馋)
    javascritpt 原型链
    PKU 1276 Cash Machine
    前端开发——图片标注工具
    Android Notification通知详细解释
    android 如何加入第一3正方形lib图书馆kernel于
    linux 在系统启动过程
    android CountDownTimer 倒计时
    承受
  • 原文地址:https://www.cnblogs.com/callmebg/p/7620382.html
Copyright © 2011-2022 走看看