题解: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;
}
posted @ 2025-11-15 11:12  linruicong  阅读(5)  评论(0)    收藏  举报