1. 程式人生 > >lg2313 [HNOI2005]湯姆的遊戲

lg2313 [HNOI2005]湯姆的遊戲

math 省選 logs pre org sin ace main ==

Problem

原題

Source

這道題目我感覺很簡單啊,不是一道省選題的難度(為什麽暴力可以過?)
然後我就覺得很GG的是我忘記了.........

#define int double

然後就會光榮的36分
正解的思路就是按照他給出的條件一一枚舉,最後就可以了...

Code

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
using namespace std;
#define ll long long
double dis(double a,double b,double c,double d){
    return sqrt((c-a)*(c-a)+(d-b)*(d-b));
}
const int maxm=510;
int tot1,tot2;
struct node1{
    double x1,x2,y1,y2;
}ra[maxm];
struct node2{
    double x,y,r;
}c[maxm];
int main(){
    int i,j,k,n,m;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++){
        char s;
        cin>>s;
        if(s=='r')
        {
            ++tot1;
            scanf("%lf%lf%lf%lf",&ra[tot1].x1,&ra[tot1].y1,&ra[tot1].x2,&ra[tot1].y2);
        }
        else
        {
            ++tot2;
            scanf("%lf%lf%lf",&c[tot2].x,&c[tot2].y,&c[tot2].r);
        }
    }
    for(i=1;i<=m;i++){
        double x,y;int ans=0;
        scanf("%lf%lf",&x,&y);
        for(j=1;j<=tot1;j++)
            if(x<ra[j].x2 && x>ra[j].x1 && y>ra[j].y1 && y<ra[j].y2)ans++;
        for(j=1;j<=tot2;j++)
            if(dis(c[j].x,c[j].y,x,y)<c[j].r)ans++;
        printf("%d\n",ans);
    }
    return 0;
}

lg2313 [HNOI2005]湯姆的遊戲