CODEFORCES-1216 C. White Sheet

   C. White Sheet

题目链接:https://codeforces.com/contest/1216/problem/C

 

题目大意:给你两个黑色矩形和一个白色矩形的左下和右上角的坐标,问你白色矩形是否能够完全被黑色矩形覆盖

解题思路:如果白色矩形能够被黑色矩形完全覆盖,则白色矩形边上的所有点都在黑色矩形之内,因此我们可以考虑遍历

白色边上的所有点,但是for循环遍历的话只能遍历坐标为整数的点,如果有长度为2的边没有覆盖到,这是侯通过上述方法还是可以检测出的(假设1-5与7-10能够被覆盖,这是同过遍历到

x为6的点就可以得到正确答案)但是如果是1的话呢,这时候显然是没法检测出来的,因此我们考虑把这个无法覆盖的区间放大化,这时候就可以检测出一点使的其不符合题意(参加题目所给的第三组

样列)。

#include<iostream>
using namespace std;
int x1,x2,x3,x4,x5,x6;
int y1,y2,y3,y4,y5,y6;
bool check(int x,int y,int x1,int y1,int x2,int y2)
{
    return x<x1||x>x2||y<y1||y>y2;
}
void solve()
{
    for(int x=x1;x<=x2;x++)
    {
        if(check(x,y1,x3,y3,x4,y4)&&check(x,y1,x5,y5,x6,y6))
        {
             cout<<"YES"<<endl;
             return ;
        }
        if(check(x,y2,x3,y3,x4,y4)&&check(x,y2,x5,y5,x6,y6))
        {
             cout<<"YES"<<endl;
             return ;
        }    
    }
    for(int y=y1;y<=y2;y++)
    {
        if(check(x1,y,x3,y3,x4,y4)&&check(x1,y,x5,y5,x6,y6))
        {
             cout<<"YES"<<endl;
             return ;
        }
        if(check(x2,y,x3,y3,x4,y4)&&check(x2,y,x5,y5,x6,y6))
        {
             cout<<"YES"<<endl;
             return ;
        }    
    }
    cout<<"NO"<<endl;
}
int main()
{
    
    cin>>x1>>y1>>x2>>y2;
    cin>>x3>>y3>>x4>>y4;
    cin>>x5>>y5>>x6>>y6;
    x1*=2;y1*=2;
    x2*=2;y2*=2;
    x3*=2;y3*=2;
    x4*=2;y4*=2;
    x5*=2;y5*=2;
    x6*=2;y6*=2;
    solve();
    return 0;    
} 

猜你喜欢

转载自www.cnblogs.com/tombraider-shadow/p/11567608.html