NOIP 2010 导弹拦截
2016-11-02 20:46
190 查看
题目描述
经过 11 年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截。当工作半径为 0 时,则能够拦截与它位置恰好相同的导弹。但该导弹拦截系统也存在这样的缺陷:每套系统每天只能设定一次工作半径。而当天的使用代价,就是所有系统工作半径的平方和。
某天,雷达捕捉到敌国的导弹来袭。由于该系统尚处于试验阶段,所以只有两套系统投入工作。如果现在的要求是拦截所有的导弹,请计算这一天的最小使用代价。
【题目分析】
枚举。
【代码】
经过 11 年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截。当工作半径为 0 时,则能够拦截与它位置恰好相同的导弹。但该导弹拦截系统也存在这样的缺陷:每套系统每天只能设定一次工作半径。而当天的使用代价,就是所有系统工作半径的平方和。
某天,雷达捕捉到敌国的导弹来袭。由于该系统尚处于试验阶段,所以只有两套系统投入工作。如果现在的要求是拦截所有的导弹,请计算这一天的最小使用代价。
【题目分析】
枚举。
【代码】
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int x1,x2,y1,y2; struct node{ int x,y; }a[100002]; int g[100002],n,ans=0x3f3f3f3f; bool cmp(node a,node b) { return (a.x-x1)*(a.x-x1)+(a.y-y1)*(a.y-y1)<(b.x-x1)*(b.x-x1)+(b.y-y1)*(b.y-y1); } int main() { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); scanf("%d",&n); for (int i=1;i<=n;++i) scanf("%d%d",&a[i].x,&a[i].y); sort(a+1,a+n+1,cmp); a[0].x=x1;a[0].y=y1; for (int i=n;i>=1;--i) g[i]=max(g[i+1],(a[i].x-x2)*(a[i].x-x2)+(a[i].y-y2)*(a[i].y-y2)); for (int i=0;i<=n;++i) ans=min(ans,(a[i].x-x1)*(a[i].x-x1)+(a[i].y-y1)*(a[i].y-y1)+g[i+1]); printf("%d\n",ans); }
相关文章推荐
- NOIP2010普及组-导弹拦截
- sdnu 1040.导弹拦截(2010 NOIP普及组)
- NOIP2010第一道 ---导弹拦截(摘自洛谷题解)
- 题目:[NOIP2010普及组]导弹拦截
- NOIP2010普及组 导弹拦截(贪心)
- 【NOIP2010】洛谷1158 导弹拦截
- noip 2010 导弹拦截(枚举贪心)
- [NOIP 2010] 导弹拦截
- 乌龟棋 (NOIP2010)复赛 提高组 试题二 解题代码
- noip2010 引水入城 bfs+贪心
- 【NOIP2010提高组T4】引水入城-搜索+DP
- NOIP2010 乌龟棋
- 乌龟棋(noip2010)
- [NOIP2010]引水入城
- 【dp】NOIP2010提高组乌龟棋
- NOIP2010提高组乌龟棋 -SilverN
- 李耀于NOIP2010集训出的题 Dvalue
- 【NOIp 2010】【BFS】引水入城
- NOIP2010普及组T3 接水问题 ——S.B.S.
- noip2010提高组3题题解 by rLq