枚举弦心距
求出边界
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#include<climits>
#include<string>
#include<cstdlib>
#include<ctime>
#define MOD 1000000007
#define LL long long
using namespace std;
int n,m,i,x,y,rk,j,l,r,t,f,pic[5005][5005],ans,d;
int dis(int xx,int yy)
{
int re;
re=(xx-x)*(xx-x)+(yy-y)*(yy-y);
return re;
}
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&rk);
for(j=0;j<=rk;j++)
{
d=sqrt(rk*rk-j*j);
l=max(x-d,1);
r=min(x+d,n);
t=max(y-j,1);
f=min(y+j,n);
pic[l][t]+=1;
pic[r+1][t]-=1;
pic[l][f]+=1;
pic[r+1][f]-=1;
}
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
pic[i][j]+=pic[i-1][j];
if(!pic[i][j]) ans++;
}
printf("%d",ans);
return 0;
}