#include<cstdio>
#include<algorithm>
using namespace std;
struct distance{ //导弹到两个系统的距离
int a, b;
bool operator <(const distance u) const {return a>u.a;}
}dis[1000010];
int main(){
int x1,x2,y1,y2,x,y,s,t,n;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);//两个系统的坐标
scanf("%d",&n);//导弹数
for(int i=0;i<n;i++){
scanf("%d%d",&x,&y);
dis[i].a=(x-x1)*(x-x1)+(y-y1)*(y-y1);
dis[i].b=(x-x2)*(x-x2)+(y-y2)*(y-y2);
}
sort(dis,dis+n);//直接快排
s=dis[0].a;t=0;
for(int i=0;i<n;i++){
s=min(s,dis[i].a+t);
t=max(t,dis[i].b);
}
printf("%d\n",s);
return 0;
}
var x1,y1,x2,y2,x,y,i,s,t,n:longint; distA,distB:array[1..100010] of longint; procedure Qsort(l,r:longint); var i,j,x,temp:longint; begin i:=l; j:=r; x:=distA[(l+r) div 2]; repeat while distA[i]>x do inc(i); while x>distA[j] do dec(j); if i<=j then begin temp:=distA[i]; distA[i]:=distA[j]; distA[j]:=temp; temp:=distB[i]; distB[i]:=distB[j]; distB[j]:=temp; inc(i); dec(j); end; until i>j; if i<r then Qsort(i,r); if l<j then Qsort(l,j); end; function min(a,b:longint):longint; begin if a<b then min:=a else min:=b; end; function max(a,b:longint):longint; begin if a>b then max:=a else max:=b; end; begin assign(input,'missile2.in'); reset(input); assign(output,'missile2.out'); rewrite(output); readln(x1,y1,x2,y2); readln(n); for i:=1 to n do begin readln(x,y); distA[i]:=sqr(x-x1)+sqr(y-y1); distB[i]:=sqr(x-x2)+sqr(y-y2); end; Qsort(1,n); s:=distA[1]; t:=0; for i:=1 to n do begin s:=min(s,distA[i]+t); t:=max(t,distB[i]); end; writeln(s); close(input); close(output); end.
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; struct distance{ //导弹到两个系统的距离 int a, b; bool operator <(const distance u) const {return a>u.a;} }dis[1000010]; int main(){ int x1,x2,y1,y2,x,y,s,t,n; scanf("%d%d%d%d",&x1,&y1,&x2,&y2);//两个系统的坐标 scanf("%d",&n);//导弹数 for(int i=0;i<n;i++){ scanf("%d%d",&x,&y); dis[i].a=(x-x1)*(x-x1)+(y-y1)*(y-y1); dis[i].b=(x-x2)*(x-x2)+(y-y2)*(y-y2); } sort(dis,dis+n);//直接快排 s=dis[0].a;t=0; for(int i=0;i<n;i++){ s=min(s,dis[i].a+t); t=max(t,dis[i].b); } printf("%d\n",s); return 0; }
#include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> using namespace std; const int N = 100000 + 10; struct daodan { int a, b; bool operator <(const daodan u) const { return a > u.a; } } e[N]; int n, x[3], y[3], s, t; inline int sqr(int x) { return x * x; } int main() { freopen("missile.in", "r", stdin); freopen("missile.out", "w", stdout); scanf("%d %d", x+1, y+1); scanf("%d %d", x+2, y+2); scanf("%d", &n); for(int i=0; i<n; i++) { scanf("%d %d", x, y); e[i].a = sqr(x[0] - x[1]) + sqr(y[0] - y[1]); e[i].b = sqr(x[0] - x[2]) + sqr(y[0] - y[2]); } sort(e, e+n); s = e[0].a; for(int i=0; i<n; i++) { s = min(s, e[i].a + t); t = max(t, e[i].b); } printf("%d\n", s); return 0; }