题目
自行从官网查找即可
解题思路以及代码
#include<iostream>
using namespace std;
int area( int x1, int y1, int x2, int y2,int a ,int b){
//求(0,0)和(a,b)组成的矩形和(x1,y1)和(x2,y2)组成矩形的交集
int minx=x1<x2?x1:x2;
int miny=y1<y2?y1:y2;
int maxx=x1>x2?x1:x2;
int maxy=y1>y2?y1:y2;
//不相交的情况
if(minx>a || miny>b || maxx<0 || maxy<0){
return 0;
}
else if(minx>=0&&miny>=0&&maxx<=a&&maxy<=b){
//判断完全包含的情况
return (maxx-minx)*(maxy-miny);
}
else{
//判断部分相交的情况
int max_right=maxx>a?a:maxx;
int min_right=minx<0?0:minx;
int max_up=maxy>b?b:maxy;
int min_down=miny<0?0:miny;
return (max_right-min_right)*(max_up-min_down);
}
}
int main(){
int n,a,b,x1,x2,y1,y2;
cin>>n>>a>>b;
int sum=0;
for (int i = 0; i < n; i++)
{
cin>>x1>>y1>>x2>>y2;
// cout<<area(x1,y1,x2,y2,a,b)<<endl;
sum+=area(x1,y1,x2,y2,a,b);
}
cout<<sum<<endl;
return 0;
}
需要解释的地方只是在部分相交的地方,你们可以自行画一点图进行辅助,用这种比较方法可以只需要四个三目运算符即可实现面积的求解,难度较低。