题解 P1158 【导弹拦截】
首先,这道题一看,其实就是一道曼哈顿距离+排序+暴力的思想,首先曼哈顿距离就是求平面直角坐标系中两点的距离,我们首先求出每个点的距离,在由大到小排序(要用C++)哦!,我们在用一个minn来储存最小值,所以大致的思想就是这样,话不多说,上代码!
#include<bits/stdc++.h>
using namespace std;
int X1,Y1,X2,Y2,n=0,minn,r,x,y;
struct data {
int r1,r2;
} a[12345667];//结构体,定义两个变量
bool cmp(data a,data b) {
return a.r1>b.r1;
}//自行判断c++stl里的sort由大到小排列
int main() {
cin>>X1>>Y1>>X2>>Y2>>n;
for(int i=1; i<=n; i++) {
cin>>x>>y;
a[i].r1=(X1-x)*(X1-x)+(Y1-y)*(Y1-y);
a[i].r2=(X2-x)*(X2-x)+(Y2-y)*(Y2-y);
}//储存曼哈顿距离
sort(a+1,a+n+1,cmp);//排序
int i=2,rr1=a[1].r1,rr2=0;
minn=rr1+rr2;//定义最小值
while(i<=n) {
rr2=max(rr2,a[i-1].r2);
rr1=a[i].r1 ;
minn=min(minn,rr1+rr2);
i++;
}//暴力思想
cout<<minn;
return 0;
}
好了就到此为止,是不是SO EASY!