题解 CF1216C 【White Sheet】
虽然也很水,但这道还是比前两道难多了...
题目大意:给你三个位于同一平面直角坐标系的矩形,询问你后两个是否完全覆盖了前一个
首先,最直观的想法应该是,把第一个矩形内部每个整数点检查一下,看看是否位于其他两个矩形的内部
但是一看数据范围,哇,$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】的更多相关文章
- [CF1216C] White Sheet - 离散化,模拟
虽然分类讨论应该是比较推崇的解法,但是我就是喜欢暴力 #include <bits/stdc++.h> using namespace std; #define int long long ...
- 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 ...
- White Sheet
C - White Sheet 思路:先看代码,分成了四个条件.第一个和第二个表示的都是当白矩形存在某个黑矩形内部的情况. 另外就是:白矩形位于两个黑矩形的并集区域. 即可分为两种情况,一种是白矩形位 ...
- Codeforces Round #587 C. White Sheet(思维+计算几何)
传送门 •题意 先给一个白矩阵,再两个黑矩阵 如果两个黑矩阵能把白矩阵包含,则输出NO 否则输出YES •思路 计算几何题还是思维题呢? 想起了上初中高中做几何求面积的题 这个就类似于那样 包含的话分 ...
- CodeForces 1200D White Lines
cf题面 Time limit 1500 ms Memory limit 262144 kB 解题思路 官方题解 1200D - White Lines Let's consider a single ...
- USACO 6.2 Shaping Regions
Shaping Regions N opaque rectangles (1 <= N <= 1000) of various colors are placed on a white s ...
- Codeforces Round #587
题目链接:Round #587 题目答案:官方Editorial.My Solution A. Prefixes 题意:给一字符串,只含有'a'或'b',需要改变某些位置('a'变'b'或'b'变'a ...
- C#中如何给Excel添加水印
我们知道Microsoft Excel并没有内置的功能直接给Excel表添加水印,但是其实我们可以用其他变通的方式来解决此问题,如通过添加页眉图片或艺术字的方法来模仿水印的外观.所以在这篇文章中,我将 ...
- ural 1147. Shaping Regions
1147. Shaping Regions Time limit: 0.5 secondMemory limit: 64 MB N opaque rectangles (1 ≤ N ≤ 1000) o ...
随机推荐
- Oracle Audit 功能的使用和说明
http://blog.itpub.net/9399028/viewspace-712457/审计(Audit) 用于监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录:存储在syst ...
- gisoracle做windows界面
import tkinter as tk from tkinter import messagebox # 设置窗口居中 def window_info(): ws = window.winfo_sc ...
- NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤<转>
原帖地址:https://blog.csdn.net/z6482/article/details/7660748 ------------------------------------------- ...
- ajax上传图片报错TypeError: 'append' called on an object that does not implement interface Fo
使用FormData时报错:TypeError: 'append' called on an object that does not implement interface FormData 解决办 ...
- 小程序运行报错navigateTo:fail page "pages/warn/warn" is not found
在index.js中配置触发时页面转发 wx.navigateTo({ url: '../warn/warn', }) 实际上触发时报错页面找不到 原因是页面路径没有在app.json里面没有定义过, ...
- idea 启动web项目
1>Run>Edit Configurations... 2>Server>Open browser>URL>http://localhost:8888/demo2 ...
- [转]地理投影,常用坐标系详解、WGS84、WGS84 Web墨卡托、WGS84 UTM、北京54坐标系、西安80坐标系、CGCS2000坐标系
转自:http://www.rivermap.cn/docs/show-1829.html 常用坐标系详解 (一)WGS84坐标系 WGS-84坐标系(World Geodetic System一19 ...
- prometheus + influxdb + grafana + mysql
前言 本文介绍使用influxdb 作为prometheus持久化存储和使用mysql 作为grafana 持久化存储的安装方法 一 安装go环境 如果自己有go环境可以自主编译remote_stor ...
- git merge 结果是 git merge Already up-to-date. 该怎么解决?
git将主干合并到当前分支时,出现如下结果: 原因在于:执行git merge前,主干的代码没有更新 正确的操作步骤如下: 1 .切换到主干 $ git checkout master 2. 更新主干 ...
- python3以post方式提交数据
# !/usr/bin/python # encoding:utf-8 import requests #下面替换成您的数据 postdata={'name':'xiaochong'} r=reque ...