比赛 EYOI与SBOI开学欢乐赛5th 评测结果 WWWWWWWWWWWWWWWWWWWW
题目名称 卫星覆盖 最终得分 0
用户昵称 Skloud 运行时间 0.599 s
代码语言 C++ 内存使用 38.61 MiB
提交时间 2022-09-16 21:59:45
显示代码纯文本
#include<cstdio>
#include<iomanip>
#include<cmath>
using namespace std;
struct high{
    int u,d;
    high(){}
    high(int a,int b){u=a,d=b;}
};
struct square{
    int f,b,l,r;
    int u,d,h;
    square(){}
    square(int x,int y,int z,int k)
    {
        f=y+k;b=y-k;l=x-k;r=x+k;u=z+k;d=z-k;h=2*k;
    }
}s[101];
int n,x,y,z,r,ans;
int a[2010][2010];
high h[2000*2000+1];int tot;
square u,o;
int main()
{
    freopen("satellitecover.in","r",stdin);
    freopen("satellitecover.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d%d",&x,&y,&z,&r);
        x+=1000,y+=1000,z+=1000;
        s[i]=square(x,y,z,r);
        u=s[i];
        for(int j=u.l;j<=u.r;j++)
        {
            for(int k=u.b;k<=u.f;k++)
            {
                if(a[j][k]==0)
                {
                    a[j][k]==++tot;
                    h[tot]=high(u.u,u.d);
                    continue;
                }
                high p=h[a[j][k]];
                h[a[j][k]]=high(max(p.u,u.u),min(p.d,u.d));
            }
        }
    }
    for(int i=1;i<=tot;i++)
    {
        ans+=h[i].u-h[i].d;
    }
    printf("%d\n",ans);
    return 0;
}