记录编号 |
325086 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2010PJ]导弹拦截 |
最终得分 |
100 |
用户昵称 |
农场主 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.264 s |
提交时间 |
2016-10-19 07:19:10 |
内存使用 |
1.80 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 100000
using namespace std;
class poi{
public:
int x,y;
}p[maxn];
class node{
public:
int d1,d2;
bool operator < (const node e)const{
if (d1==e.d1) return d2<e.d2;
else return d1<e.d1;
}
}s[maxn];
int d[maxn]={0};
int maxv[maxn]={0};
int x1,y1,x2,y2,n;
void read(){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
scanf("%d",&n);
for (int i=1;i<=n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
}
}
int sqr(int x){
return x*x;
}
void work(){
for (int i=1;i<=n;i++){
s[i].d1=sqr(abs(p[i].x-x1))+sqr(abs(p[i].y-y1));
s[i].d2=sqr(abs(p[i].x-x2))+sqr(abs(p[i].y-y2));
}
sort(s+1,s+n+1);
// for (int i=1;i<=n;i++){
// printf("%d %d\n",s[i].d1,s[i].d2);
// }
for (int i=n;i>=1;i--){
maxv[i]=max(maxv[i+1],s[i].d2);
}
int ans=1<<29;
maxv[n+1]=0;
for (int i=1;i<=n;i++){
ans=min(ans,s[i].d1+maxv[i+1]);
}
printf("%d",ans);
}
int main(){
freopen("missile2.in","r",stdin);
freopen("missile2.out","w",stdout);
read();
work();
return 0;
}