题解 P4122 【[USACO17DEC]Blocked Billboard】

· · 题解

本题的数据范围可以直接模拟。

当这个方格被覆盖的时候,标记该方格左上角的点。

注意点:数据范围为 [-1000,1000],模拟时注意把 x,y 值都加上 1000

#include<bits/stdc++.h>
using namespace std;
int m[2200][2200],ans,a,s,d,f;//m为该平面直角坐标系,ans为没有被覆盖的面积
int main()
{
    for(int x=1;x<4;x++){
        cin>>a>>s>>d>>f;
        for(int y=a+1000;y<d+1000;y++)//x坐标 (注意此处是 < 而不是 <= ,因为标记的是点)
            for(int z=s+1000;z<f+1000;z++){//y坐标
                if(x<3)m[y][z]++,ans++;
                if(m[y][z]&&x==3)ans--;//减去重叠部分 
            }
    }
    cout<<ans;
    return 0;
}