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