毁灭

来源:互联网 发布:昆明域服务器优化 编辑:程序博客网 时间:2024/05/01 17:45

这里写图片描述
其实是个水题蛤。
我们使用差分的思想,对能够轰炸到的地方进行差分,最后看一下那个位置值为0,即为活下来的人
怎么样确定区间呢,勾股定理啊。
我们枚举lenY(纵坐标距离圆心的距离),通过lenX^2+lenY^2=r^2计算lenX即可,然后进行差分

#include <cstdio>#include <iostream>#include <map>#include <cmath>using namespace std;int f[5001][5001];int main(){    int n,m;    scanf("%d%d",&n,&m);    for(int i=1;i<=m;i++)    {        int x,y,r;        scanf("%d%d%d",&x,&y,&r);        for(int j=max(1,y-r);j<=min(n,y+r);j++)         {            int len1=y-j;            len1*=len1;            int len2=sqrt((double)(r*r)-len1);            int x1=max(1,x-len2),x2=min(n,x+len2);            f[j][x1]+=1,f[j][x2+1]-=1;         }    }    int ans=0;    for(int i=1;i<=n;i++)     for(int j=1;j<=n;j++)      {        f[i][j]+=f[i][j-1];        if(f[i][j]) ans++;      }    printf("%d",n*n-ans);    return 0;}