虽然也很水,但这道还是比前两道难多了...


题目大意:给你三个位于同一平面直角坐标系的矩形,询问你后两个是否完全覆盖了前一个

首先,最直观的想法应该是,把第一个矩形内部每个整数点检查一下,看看是否位于其他两个矩形的内部

但是一看数据范围,哇,$10^6$,点最多就有${10}^{12}$个,直接爆炸,好走不送

我们只能换思路了。。。

考虑两个矩形超出那个矩形的部分没有任何用处,直接砍掉

这样我们就只用考虑这个矩阵内部了

可以看出,覆盖也可以说是矩形切掉了位置与盖在上面的矩形相同的且相当于上面的矩形大小的一块,但这样做还是太过麻烦,因为有时会变成下图这样:

倘若这个矩形没有彻底覆盖大矩形的一条边(这个表达其实有问题,但大家应该能够理解),那么这个矩形的覆盖是对覆盖整个大矩形是没有贡献的,因为剪裁后不能使得大矩形的长短缩小

所以我们只需要将大矩形切掉能彻底覆盖大矩形一条边的矩形即可,。

这个是实现应该很简单,毕竟直接缩小大矩形长短即可,最后判断大矩形是否被切没了就能判断是否能被覆盖了

P.S. 记得判断小矩形是否被切完了,切完就不要执行操作了(感谢 @YiShen 提供hack数据)

代码如下:

#include<cstdio>

inline int read(){
int r=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')r=(r<<1)+(r<<3)+c-'0',c=getchar();
return r*f;
} int x[2],y[2],b_x[2],b_y[2]; inline int min(int a,int b){
return a<b?a:b;
} inline int max(int a,int b){
return a>b?a:b;
} int main(){
x[0]=read(),y[0]=read();
x[1]=read(),y[1]=read();
for(int i=1;i<=2;i++){
b_x[0]=max(read(),x[0]),b_y[0]=max(read(),y[0]);//超出大矩形,砍掉
b_x[1]=min(read(),x[1]),b_y[1]=min(read(),y[1]);//超出大矩形,砍掉
for(int j=0;j<=1;j++)//先看左边和下面,再看右边和上面
if(b_x[j]==x[j]&&b_y[j]==y[j]){//倘若连顶点都没覆盖,更别说整条边了
if(b_x[j^1]==x[j^1])y[j]=b_y[j^1];//看看该边是否被覆盖,若是,将大矩形切去这一段
if(b_y[j^1]==y[j^1])x[j]=b_x[j^1];//看看该边是否被覆盖,若是,将大矩形切去这一段
}
}
if(x[0]==x[1]&&y[0]==y[1])printf("NO");
else printf("YES");
return 0;
}

倘若无法理解此处的异或运算(其实就是相对的两个顶点(左下和右上)),建议手模或者调试走一遍

题解 CF1216C 【White Sheet】的更多相关文章

  1. [CF1216C] White Sheet - 离散化,模拟

    虽然分类讨论应该是比较推崇的解法,但是我就是喜欢暴力 #include <bits/stdc++.h> using namespace std; #define int long long ...

  2. Codeforces Round #587 (Div. 3) C. White Sheet

    链接: https://codeforces.com/contest/1216/problem/C 题意: There is a white sheet of paper lying on a rec ...

  3. White Sheet

    C - White Sheet 思路:先看代码,分成了四个条件.第一个和第二个表示的都是当白矩形存在某个黑矩形内部的情况. 另外就是:白矩形位于两个黑矩形的并集区域. 即可分为两种情况,一种是白矩形位 ...

  4. Codeforces Round #587 C. White Sheet(思维+计算几何)

    传送门 •题意 先给一个白矩阵,再两个黑矩阵 如果两个黑矩阵能把白矩阵包含,则输出NO 否则输出YES •思路 计算几何题还是思维题呢? 想起了上初中高中做几何求面积的题 这个就类似于那样 包含的话分 ...

  5. CodeForces 1200D White Lines

    cf题面 Time limit 1500 ms Memory limit 262144 kB 解题思路 官方题解 1200D - White Lines Let's consider a single ...

  6. USACO 6.2 Shaping Regions

    Shaping Regions N opaque rectangles (1 <= N <= 1000) of various colors are placed on a white s ...

  7. Codeforces Round #587

    题目链接:Round #587 题目答案:官方Editorial.My Solution A. Prefixes 题意:给一字符串,只含有'a'或'b',需要改变某些位置('a'变'b'或'b'变'a ...

  8. C#中如何给Excel添加水印

    我们知道Microsoft Excel并没有内置的功能直接给Excel表添加水印,但是其实我们可以用其他变通的方式来解决此问题,如通过添加页眉图片或艺术字的方法来模仿水印的外观.所以在这篇文章中,我将 ...

  9. ural 1147. Shaping Regions

    1147. Shaping Regions Time limit: 0.5 secondMemory limit: 64 MB N opaque rectangles (1 ≤ N ≤ 1000) o ...

随机推荐

  1. zabbix代理

    一.概述 zabbix proxy可以代替zabbix server检索客户端的数据,然后把数据汇报给zabbix server,并且在一定程度上分担了zabbix server的压力.zabbix ...

  2. centos7--zabbix3.4微信报警

    1.申请企业微信 1.1 注册企业微信的地址 https://qy.weixin.qq.com/ 1.2 按照提示进行填写 1.3 完善个人信息: 1.4 创建应用 根据提示创建应用: 1.5 筛出重 ...

  3. Linux 的crond 任务调度

    一.原理示意图 二.概述 任务调度:是指系统在某个时间执行的特定的命令或程序 任务调度分类: 1.系统工作:有些重要的工作周而复始的执行.如病毒扫描等 2.个别用户工作:个别用户可能希望执行程序,比如 ...

  4. 2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础

    2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础 目录 实验内容与步骤 (一)Webgoat安装 (二)SQL注入攻击 1.命令注入(Command Injection ...

  5. js-关于异步原理的理解和总结

    我们经常说JS是单线程的,比如Node.js研讨会上大家都说JS的特色之一是单线程的,这样使JS更简单明了,可是大家真的理解所谓JS的单线程机制吗?单线程时,基于事件的异步机制又该当如何,这些知识在& ...

  6. [转]OpenGL编程指南(第9版)环境搭建--使用VS2017

    1.使用CMake Configure中选择VS2017 Win64 , Finish: 点击Generate. 2.进入build目录 打开GLFW.sln , 生成解决方案. 打开vermilio ...

  7. HTTPWebrequest上传文件--Upload files with HTTPWebrequest (multipart/form-data)

    使用HTTPWebrequest上传文件遇到问题,可以参考Upload files with HTTPWebrequest (multipart/form-data)来解决 https://stack ...

  8. GIS地理工具案例教程——批量去除多边形的之间的间隙

    GIS地理工具案例教程--批量去除多边形的之间的间隙 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 问题:几乎所有的手工生产的数据,都存在多边 ...

  9. typescript类 继承 修饰符

    //1.ts中类的定义 /* es5: function Person(name){ this.name=name; this.run=function(){ console.log(this.nam ...

  10. 微信小程序与Html交互

    微信小程序与H5页面交互 https://www.jianshu.com/p/22e951d83841