代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a,b;
// 声明四个数组,存储 n 个地块的坐标(左下角和右上角)
int x1[10001],x2[10001],y1[10001],y2[10001];
cin>>n>>a>>b;
for(int i=0;i<n;i++)
{
cin>>x1[i]>>y1[i]>>x2[i]>>y2[i];
}//给i初始化
int area=0; //初始化 //表示最终累加在一起的田地总面积
int x,y; //表示每一小块田地的长和宽
for(int i=0;i<n;i++)
{
x=min(a,x2[i])-max(0,x1[i]);
y=min(b,y2[i])-max(0,y1[i]);
//这里注意求的是所划地块内所有现有田地的面积之和,原理即为上述两行代码,这是一个数学问题
// 只有当重叠的宽度和高度都大于 0 时,才计算该地块的面积
if(x>0&&y>0)
{
area+=x*y;
}
} // 注意:重叠区域的计算基于地块与(0,0)到(a,b)的矩形区域的重叠情况
cout<<area<<endl;
return 0;
}
//数学思想慢慢学会吧。