思路:
按每个点到第一个系统的距离排序,然后预处理出每个点及其之后的点到第二个系统的距离的最大值,再循环一遍枚举答案。
代码:
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 #define res register int 9 inline int read()10 {11 int x(0),f(1); char ch;12 while(!isdigit(ch=getchar())) if(ch=='-') f=-1;13 while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();14 return f*x;15 }16 typedef long long LL;17 const int N=100000+10;18 int n,x1,y1,x2,y2;19 int d[N];20 struct node{21 int x,y,z;22 }s[N];23 inline int calc(int a1,int b1,int a2,int b2)24 {25 return (a1-a2)*(a1-a2)+(b1-b2)*(b1-b2);26 }27 bool cmp(node a,node b) { return a.z =1 ; i--)38 d[i]=max(d[i+1],calc(x2,y2,s[i].x,s[i].y)); 39 int ans(d[1]);40 for(res i=1 ; i<=n ; i++)41 {42 int tmp(s[i].z); tmp+=d[i+1];43 ans=min(ans,tmp);44 }45 printf("%d\n",ans);46 return 0;47 }