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