导弹拦截(noip2010普及)
Posted 叫我彪哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导弹拦截(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 \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普及)的主要内容,如果未能解决你的问题,请参考以下文章