1 题目链接
进去后点,模拟考试就可以看到题目了
AC证明:
2 分析
前言:
离谱,这个题考试的时候做了30+min才写出来,但是代码还贼简单。
你说它难吧,代码这么简单,你说不难吧,我在这个题还卡了那么久。(菜鸡痛哭)
正话:
题目的意思就是 计算两个给了坐标的矩形的重合面积,怎么计算呢?
——计算重合矩形的坐标。
先考虑可以重合的情况,就会发现重合矩形的坐标是他们各个坐标往聚合中心方向的坐标值
也就是说重合矩形的左下角的坐标(l,down)和右上角的坐标(r,up)是(x1,y1)(x2,y2)(0,0)(a,b)这四个坐标点往他们中心收的值。
上面表达得有点概念化,具体说就是,
重合面积的左边界限一定是0和x1的更大的一个,对吧
重合面积的右边界限一定是b和x2的更小的一个,对吧
重合面积的上边界限一定是0和y2的更小的一个,对吧
重合面积的下边界限一定是0和y1的更大的一个,对吧
最后判断下是否重合(不重合的话,计算出来的矩形坐标肯定是不成形的)
- 没重合就不管。
- 重合就可以通过重合矩形的坐标计算重合面积。
3 AC代码
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int n,a,b;
int sum=0;
int main() {
int l,r,up,down,x1,y1,x2,y2;
cin>>n>>a>>b;
for(int i=0; i<n; i++) {//计算重合矩形的坐标
cin>>x1>>y1>>x2>>y2;
l=max(0,x1);
r=min(a,x2);
up=min(b,y2);
down=max(0,y1);
if(r>l &&up>down)//如果有重合
sum+=(r-l)*(up-down);
}
cout<<sum<<endl;
}