Portal -->arc076E

Description

  给你一个\(R*C\)的矩形,矩形中某些格子的端点上填了\(1\sim n\)这\(n\)个数字,每个数字出现了恰好两遍,现在要将每一对数字用曲线连起来,线不允许出矩形,问是否存在一种连线方案使得任意两条线不相交

  数据范围:\(1<=R,C<=10^8,1<=n<=10^5\)

  

Solution

  结论题什么的。。==

  实际上我们可以将。。这个连线看成一个。。类似切割的操作,不停地切这个平面,然后如果说两个部分不相连了那么不能存在一对点分别存在于两个部分

​  这样转化一下之后就比较直观了,注意到如果说我们连的(切的)不是两个点都在边界上的一对点,这个平面并不会有新的不相连的部分产生,也就是说如果不存在连个点都在边界上这样的点对,就一定存在一种连线方式(各种缝隙绕来绕去之类的)满足要求

  那么所以我们只要考虑那些两个点都在边界上的点对就好了,只要这些点对之间的连边不存在冲突,整个就肯定有解了,所以接下来提到的点对都是满足两个点都在边界上的点对

  注意到一旦连了一对这样的点对,就会将其所在的平面部分分成两个独立的部分,而这两个部分之间不能连边,所以我们可以考虑从矩形的左上角开始,沿着边界顺时针转一圈,按顺序将沿路上所有的点列成一排,如果说一对点之间夹有不完整的一个点对(也就是。。一对点之间只有某个点对的其中一个),那么就说明这两个点对会有冲突(按照其中一个点对将平面分成两个部分之后,另一个点对的两个点必定会被分在两个不相连的部分),那就凉凉了,这个过程我们用一个栈模拟一下即可

  

  mark:直观转化(可能做题需要一点想象力==)

  

  代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10,add=1e8+1;
struct Data{
int x,id;
friend bool operator < (Data x,Data y){return x.x<y.x;}
}rec[N*2];
int st[N];
int n,m,tot,D;
int change(int x,int y){
if (x==1) return y;
if (y==m) return x+add;
if (x==n) return m-y+1+add*2;
if (y==1) return n-x+1+add*3;
return -1;
} int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
int x1,y1,x2,y2,tmp1,tmp2;
scanf("%d%d%d",&n,&m,&D);
++n; ++m;
for (int i=1;i<=D;++i){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
++x1; ++y1; ++x2; ++y2;
tmp1=change(x1,y1);
tmp2=change(x2,y2);
if (tmp1==-1||tmp2==-1) continue;
rec[++tot].x=tmp1; rec[tot].id=i;
rec[++tot].x=tmp2; rec[tot].id=i;
}
sort(rec+1,rec+1+tot);
int top=0;
for (int i=1;i<=tot;++i){
if (st[top]==rec[i].id)
--top;
else
st[++top]=rec[i].id;
}
if (top) printf("NO\n");
else printf("YES\n");
}

【arc076E】Connected?的更多相关文章

  1. 【poj1737】 Connected Graph

    http://poj.org/problem?id=1737 (题目链接) 题意 求n个节点的无向连通图的方案数,不取模w(゚Д゚)w Solution 刚开始想了个第二类斯特林数,然而并不知道怎么求 ...

  2. 【CF913F】Strongly Connected Tournament 概率神题

    [CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...

  3. 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP

    [题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...

  4. 【CodeChef】Find a special connected block - CONNECT(斯坦纳树)

    [CodeChef]Find a special connected block - CONNECT(斯坦纳树) 题面 Vjudge 题解 还是一样的套路题,把每个数字映射到\([0,K)\)的整数, ...

  5. 【Henu ACM Round#24 E】Connected Components

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 要求把连续的一段li..ri的边全都删掉. 然后求剩下的图的联通数 如果暴力的话 复杂度显然是O(k*m)级别的. 考虑我们把li. ...

  6. 【Educational Codeforces Round 37 E】Connected Components?

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] bfs. 用一个链表来记录哪些点已经确定在某一个联通快里了. 一开始每个点都能用. 然后从第一个点开始进行bfs. 然后对于它的所有 ...

  7. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  8. Java基础知识【上】(转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  9. 【RDA】使用RDA(Remote Diagnostic Agent)工具对数据库进行健康检查

    [RDA]使用RDA(Remote Diagnostic Agent)工具对数据库进行健康检查 分类: Linux RDA英文全称叫做"Oracle Remote Diagnostic Ag ...

随机推荐

  1. Linux 安装Zookeeper<准备>(使用Mac远程访问)

    阅读本文需要安装JDK 一 Zookeeper简介 zookeeper是用java语言编写的一款为分布式应用所设计的协调服务 zookeeper是apacahe hadoop的子项目 使用zookee ...

  2. vue 跳转到外部 后回跳

    微信  vue 跳转到外部 后回跳  ,比如登陆 授权操作 .需要 路由 先跳转到一个中间页面 后再跳转到授权服务器!而不能跳转前的页面与回跳后的页面相同 不然回跳可能会出现空白 路由不解析.

  3. 简单在kubernetes中安装cadvisor

    cadvisor用于分析docker资源占用情况及性能的工具 安装命令: docker run --volume=/:/rootfs:ro --volume=/: --detach=true --na ...

  4. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  5. redis与mysql性能对比、redis缓存穿透、缓存雪崩

    写在开始 redis是一个基于内存hash结构的缓存型db.其优势在于速读写能力碾压mysql.由于其为基于内存的db所以存储数据量是受限的. redis性能 redis读写性能测试redis官网测试 ...

  6. Beta阶段第一次网络会议

    Beta阶段第一次网络会议 游戏问题 游戏细节特征不够明显,大小虽然随着电脑分辨率的不同变化着,但是存在清楚的问题 游戏中的提示信息不够,玩家无法快速了解游戏 游戏中背景声音过于单一 游戏AI太简单 ...

  7. 20172305 2018-2019-1 《Java软件结构与数据结构》第九周学习总结

    20172305 2018-2019-1 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 本周内容主要为书第十五章内容: 图(结点和结点之间的连接构成) 顶点:结点 边:结 ...

  8. OC创建对象并访问成员变量

    1.创建一个对象 Car *car =[Car new] 只要用new操作符定义的实体,就会在堆内存中开辟一个新空间 [Car new]在内存中 干了三件事 1)在堆中开辟一段存储空间 2)初始化成员 ...

  9. spring复杂数据类型传递

    1.VO对象与PO对象的区别: PO(persistant object) 持久对象:通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据库中的表相映射的java对象.最简单的PO ...

  10. 2nd 历年学生作品评论(3部)

    历年学生作品评论(3部) 1.基于GUI的图书管理系统 利用NABCD模型进行竞争性需求分析:http://www.cnblogs.com/chitty/p/4546876.html 测试说明书: h ...