题解:P8648 [蓝桥杯 2017 省 A] 油漆面积
一道差分题。
题目大意
给出 \(n\) 个矩阵,每个矩阵可能互相重叠。求被矩阵覆盖的面积有多少?
题目分析
很多大佬说要用扫描线。但是我太蒻了,也不会扫描线。于是这里给出一个二维差分的做法。不会差分的同学可以看这里。
其实就是普通的二维差分。我们对每个矩阵进行差分,然后查看每个点的值是否为真,若为真则答案加一。
AC 代码
#include<bits/stdc++.h>
using namespace std;
int n,m,s[10005][10005],ans,a,b,c,d;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a>>b>>c>>d;//读入数据
a++,b++,c++,d++;
s[a][b]++;//对差分数组进行修改
s[a][d]--;
s[c][b]--;
s[c][d]++;
}
for(int i=1;i<10005;i++)
{
for(int j=1;j<10005;j++)
{
s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];//检验是否被涂上色
if(s[i][j]) ans++;
}
}
cout<<ans;//输出答案
return 0;
}

浙公网安备 33010602011771号