题目解读:给你一张白纸和两张黑纸的左下角坐标和右上角坐标,判断这两张黑纸是否能完全覆盖白纸。
自我检讨:一看水题,但瞎模拟,乱模拟,最后把自己搞迷了。主要是没思路,不知道往哪个方向思考。
解题思路:怎么才能让黑纸完全覆盖白纸呢?1.任意一个黑纸完全覆盖白纸。2.两个黑纸在x方向拼接或者在y方向拼接后完全覆盖黑纸。这样就没了,我滴娘唉!服了我自己,我都在在想啥,在坑里乱转。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
int x1,x2,y1,y2;
int x3,x4,y3,y4;
int x5,x6,y5,y6;
}a;
bool judge()
{
int f=0;
if(a.x3<=a.x1&&a.y3<=a.y1&&a.x4>=a.x2&&a.y4>=a.y2) f=1;//判断第一个黑纸是否完全覆盖白纸
if(a.x5<=a.x1&&a.y5<=a.y1&&a.x6>=a.x2&&a.y6>=a.y2) f=1;//判断第二个黑纸是否完全覆盖白纸
if(a.x3<=a.x1&&a.x4>=a.x2&&a.x5<=a.x1&&a.x6>=a.x2)//判断两张黑纸在y方向拼接后是否完全覆盖白纸
{
if(a.y3<=a.y1&&a.y4>=a.y5&&a.y6>=a.y2) f=1;
if(a.y5<=a.y1&&a.y6>=a.y3&&a.y4>=a.y2) f=1;
}
if(a.y3<=a.y1&&a.y4>=a.y2&&a.y5<=a.y1&&a.y6>=a.y2)//判断两张黑纸在x方向拼接后是否完全覆盖白纸
{
if(a.x3<=a.x1&&a.x4>=a.x5&&a.x6>=a.x2) f=1;
if(a.x5<=a.x1&&a.x6>=a.x3&&a.x4>=a.x2) f=1;
}
return f;
}
int main()
{
cin>>a.x1>>a.y1>>a.x2>>a.y2;
cin>>a.x3>>a.y3>>a.x4>>a.y4;
cin>>a.x5>>a.y5>>a.x6>>a.y6;
if(judge())
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}