#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;
}