一道差分题。
题目大意
给出 \(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;
}