4 10 10
0 0 5 5
5 -2 15 3
8 8 15 15
-2 10 3 15
样例输出
44
解题思路:
由题意可知,(a,b)坐标必定大于,都位于第一象限,即所计算的面积必定都在第一象限内。通过观察样例可知,通过对输入的每一个坐标进行讨论,可以将所有的坐标都转换在第一象限里。每一个坐标的横纵坐标又要分开讨论,分三种情况,分别是在(a,b)范围之内,在(a,b)范围之外(横坐标大于a,纵坐标大于b),其次就是坐标出现负数的情况,这个时候就需要把他变换到第一象限来,之后就是横坐标相减得到长(宽),纵坐标相减得到宽(长),二者相乘就得到了面积,之后在把所有的面积都累计相加即可。
#include <iostream>
using namespace std;
int main()
{
int n,a,b;
cin>>n>>a>>b;
int x1,y1,x2,y2,sum = 0;
for(int i = 0;i < n;i++)
{
cin>>x1>>y1>>x2>>y2;
if(x1 >= 0&&x1 <= a) x1 = x1;
else if(x1 < 0) x1 = 0;
else x1 = a;
if(y1 >= 0&&y1 <= b) y1 = y1;
else if(y1 < 0) y1 = 0;
else y1 = b;
if(x2 >= 0&&x2 <= a) x2 = x2;
else if(x2 < 0) x2 = 0;
else x2 = a;
if(y2 >= 0&&y2 <= b) y2 = y2;
else if(y2 < 0) y2 = 0;
else y2 = b;
sum += (x2-x1)*(y2-y1);
}
cout<<sum<<endl;
return 0;
}