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


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

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

但是一看数据范围,哇,$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. Requests库的主要方法:requests.request为requests.get和requests.post两个的汇总,只是需要传方法

    1. requests.request(method,url,**kwargs) method:请求方式,对应get/put/post等七种 :拟获取页面的url链接 :控制访问参数,共13个 met ...

  2. sql server for centos7

    sql server for centos7 笔者在CENTOS7上面安装SQL SERVER,感觉非常方便. 但有一点要注意,字段是字符串类型的,要使用nvarchar(),不能使用varchar( ...

  3. ASP.NET_微信JS_SDK调用

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;usi ...

  4. JVM 启动类加载器2

    在运行期,一个Java类是由该类的完全限定名(binary name,二进制名)和用于加载该类的定义类加载器(defining loading)所共同决定的.如果同样名字(即相同的完全限定名)的类由两 ...

  5. python中list和dict

    字典(Dictionary)是一种映射结构的数据类型,由无序的“键-值对”组成.字典的键必须是不可改变的类型,如:字符串,数字,tuple:值可以为任何python数据类型. 1.新建字典 1 2 3 ...

  6. 负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息?

    负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息? 原文: https://help.aliyun.com/document_detail/127193.html?spm ...

  7. Typescript 介绍和安装编译

    一. Typescript 介绍 1. TypeScript 是由微软开发的一款开源的编程语言. 2. TypeScript 是 Javascript 的超级,遵循最新的 ES6.Es5 规范.Typ ...

  8. Ionic4.x ion-refresher 下拉更新

    官方文档:https://ionicframework.com/docs/api/refresher <ion-header> <ion-toolbar> <ion-ti ...

  9. weui 可移动悬浮按钮

    @CHARSET "UTF-8"; /** 右下角跳转按钮 跳转到列表 */ #list_note_icon { position: fixed; bottom: 10%; rig ...

  10. SeetaFaceEngine2 实例

    LOG: Creating layer(6):LOG: Creating layer(0):LOG: Creating layer(9):LOG: Creating layer(0):LOG: Cre ...