Goblin Garden Guards(几何、枚举、标记)

https://nanti.jisuanke.com/t/28882

题意:给出几个圆心和若干个点,求没被圆覆盖的点的个数

题解:对每个圆心(转为某个正方形的内切圆)范围内的点进行标记,最后统计没被标记的结果

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define maxn 100005
#define inf 0x3f3f3f3f
#include <cstring>
#include <vector>
#define LL long long
using namespace std;
int t,n,m;
struct node
{
   int x,y;
}G[maxn];
bool book[10005][10005];
LL dis(int x,int y,int a,int b)
{
   return abs(x-a)*abs(x-a)+abs(y-b)*abs(y-b);
}
void check(int x,int y,int rr,int l,int r,int u,int d)
{
   for(int i=l;i<=r;i++)
   {
      for(int j=d;j<=u;j++)
      {
         if(dis(i,j,x,y)<=rr*rr)
            book[i][j]=true;
      }
   }
}
int main()
{
   cin>>n;
   for(int i=0;i<n;i++)
   {
      cin>>G[i].x>>G[i].y;
   }
   cin>>m;
   while(m--)
   {
      int x,y,rr,l,r,u,d;
      cin>>x>>y>>rr;
      l=max(0,x-rr);
      r=min(10000,x+rr);
      u=min(10000,y+rr);
      d=max(0,y-rr);
      check(x,y,rr,l,r,u,d);
   }
   int ans=0;
   for(int i=0;i<n;i++)
   {
      if(book[G[i].x][G[i].y]==false)
         ans++;
   }
   cout << ans << endl;
   return 0;
}

猜你喜欢

转载自blog.csdn.net/wwwlps/article/details/81280107
今日推荐