码迷,mamicode.com
首页 > 其他好文 > 详细

导弹拦截(noip2010普及)

时间:2017-10-02 17:52:18      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:color   cin   return   cout   include   style   second   cond   答案   

 

洛谷

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

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

设按距系统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 \n",dis[i].second);
    }    */     
    while (n) 
    {
        ans = min(ans, dis[n].first + (r = max(r, dis[n + 1].second)));
        n--;
        //printf("%d\n",ans);
    }
    cout << ans << endl;
    return 0;
}

 

然后从大到小历遍导弹

这时候就有一个反悔机制

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

那就更新喽

显然它合法

导弹拦截(noip2010普及)

标签:color   cin   return   cout   include   style   second   cond   答案   

原文地址:http://www.cnblogs.com/callmebg/p/7620382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!