题解:SP18666 UVA1 - Radiation
没测过,不知道对不对,这题简单也不难,看懂花了十分钟;
补个知识点:两点距离坐标公式
我们便写出了这么个抽象
#include<bits/stdc++.h>
using namespace std;
const int maxn=10000;
int xx[maxn],yy[maxn];
int n;
struct pp{
int shabi1,shabi2;
}a[maxn];
bool cmp(pp a,pp b){
if(a.shabi1!=b.shabi1){
return a.shabi1<b.shabi1;
}
else {
return a.shabi2<b.shabi2;
}
}
int hx1,hy1,r1,hx2,hy2,r2;
int fanzi1,fangzi,ans;
int main(){
cin>>n;
while(n!=0){
fanzi1++;
cout<<"Case "<<fanzi1<<":"<<"\n";
ans=0;
for(int i=1;i<=n;i++){
cin>>xx[i]>>yy[i];
}
cin>>hx1>>hy1>>r1>>hx2>>hy2>>r2;
for(int i=1;i<=n;i++){
a[i].shabi1=(xx[i]-hx1)*(xx[i]-hx1)+(yy[i]-hy1)*(yy[i]-hy1);
a[i].shabi2=(xx[i]-hx2)*(xx[i]-hx2)+(yy[i]-hy2)*(yy[i]-hy2);
}
cin>>fangzi;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=fangzi;i++){
ans=0;
cin>>r1>>r2;
for(int j=1;j<=n;j++){
if(a[j].shabi1<=r1*r1&&a[j].shabi2<=r2*r2){
ans++;
}
else if(a[j].shabi1>r1*r1&&a[j].shabi2>r2*r2){
break;
}
}
cout<<ans<<"\n";
}
cin>>n;
}
return 0;
}