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; }