题解:SP18666 UVA1 - Radiation

· · 题解

没测过,不知道对不对,这题简单也不难,看懂花了十分钟;

补个知识点:两点距离坐标公式 AB=sqrt(pow(x1-x2)-pow(y1-y2))

我们便写出了这么个抽象

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