AtCoder Regular Contest 076E Coneected?
题意
给出一个矩形区域和上面的m对整点,要求在矩形区域内画m条互不相交的线(可以是曲线)分别把m对点连接起来.只需要输出能不能做到.
分析
假设我们已经画了一条线.因为在这个题中有用的是平面区域之间的相对位置,那么这条线我们可以随便拉长,缩短,点的位置也可以移动而不影响结果.因此,如果一对点都不在矩形区域的边界上,我们可以把它们之间连线然后把这两个点之间的线缩短,把一个点移动到另一个点的位置上.如果有一个点在边界上,另一个点不在边界上,那么可以连线之后把不在边界上的点移动到边界上.
可以,这很拓扑
因此我们可以断言:只有两个点都在边界上的点会产生矛盾.现在我们可以把边界看成一个环,上面有m对点,要求在环的内部画线分别把m对点连接起来.那么给所有点逆时针排序后,如果有两对点(A1,A2)和(B1,B2)是A1,B1,A2,B2的顺序,那么无解.如果有解的话,任意两对点在环上所占的区间要么相互包含,要么互不相交.那么这是一个类似括号序列的东西,拿栈扫一遍就可以了.
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100005;
int R,C,N;
struct point{
int x,y,num;
void read(){
scanf("%d%d",&x,&y);
}
bool onedge(){
if(x==0||y==0||x==R||y==C)return true;
else return false;
}
int typ()const{
if(x==0)return 1;
else if(y==0)return 2;
else if(x==R)return 3;
else return 4;
}
bool operator <(const point &B)const{
int t1=typ(),t2=B.typ();
if(t1!=t2)return t1<t2;
else if(t1==1)return y>B.y;
else if(t1==2)return x<B.x;
else if(t1==3)return y<B.y;
else return x>B.x;
}
}P[maxn][2];
point P2[maxn*2];int tot=0;
int stk[maxn*2],top=0;
int main(){
scanf("%d%d%d",&R,&C,&N);
for(int i=1;i<=N;++i){
P[i][0].read();P[i][1].read();P[i][0].num=P[i][1].num=i;
if((P[i][0].onedge())&&(P[i][1].onedge())){
P2[++tot]=P[i][0];P2[++tot]=P[i][1];
}
}
sort(P2+1,P2+tot+1);
for(int i=1;i<=tot;++i){
if(top&&stk[top-1]==P2[i].num)--top;
else stk[top++]=P2[i].num;
}
if(top)printf("NO\n");
else printf("YES\n");
return 0;
}
AtCoder Regular Contest 076E Coneected?的更多相关文章
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 094
AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
- AtCoder Regular Contest 097
AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
随机推荐
- 20145234黄斐《网络对抗技术》PC平台逆向破解
Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址. ...
- Spring中的TransactionProxyFactoryBean作用及配置(转)
问: 原文链接 http://blog.csdn.net/cpp_lzth/article/details/6551703 看AOP的时候发现spring中有个org.springframework. ...
- Scrapy爬取美女图片续集 (原创)
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用.(我的新书< ...
- 用php实现简单的自制计算器
存档: <!DOCTYPE html> <html> <head> <title>PHP实现计算器</title> </head> ...
- java 通过内存映射文件来提高IO读取文件性能
MappedByteBuffer out = new RandomAccessFile("src/demo20/test.dat", "rw"). getCha ...
- Siki_Unity_2-4_UGUI_Unity5.1 UI 案例学习
Unity 2-4 UGUI Unity5.1 UI 案例学习 任务1-1:UGUI简介 什么是GUI: 游戏的开始菜单 RPG游戏的菜单栏.侧边栏和功能栏(比如背包系统.任务列表等) 设计用来控制移 ...
- web _service 接口
1.WebService 就是 http请求 post接口 2.需要加 请求头信息 Content-Type: text/xml; 3.需要把占位符换成需要的字符串 webservice接口可以 ...
- 在jre1.8版本下,使用ikvm将jar转换为dll,以供c#调用
由于合作方使用.net编程,jar包不能用,需要转换成dll格式,来回转换了十几个dll文件(心塞..),终于生成了一个可用的.在这里将走过的弯弯绕绕总结下,希望遇到相似问题的同好们,能走得顺利些. ...
- Paper Reading - Im2Text: Describing Images Using 1 Million Captioned Photographs ( NIPS 2011 )
Link of the Paper: http://papers.nips.cc/paper/4470-im2text-describing-images-using-1-million-captio ...
- WEB前端开发流程总结
作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正 WEB前端开发项目流程总结 1.新建项目 ...