[xsy2238]snake
题意:给定一条折线,问能否在不扭曲它的情况下让它完全通过一个小孔
这个条件就是:过折线上任意一点$x$存在一条直线把折线分成不与直线相交的两部分,换句话说存在(与折线只有一个交点$x$)的直线
结论是:若点$i$严格在点$1\cdots i$或点$i\cdots n$构成的凸包内,则无解,因为过点$i$的直线必然与折线在其他的某些位置相交
所以我们可以用set维护仅插入动态凸包,边插入边查询即可
实际上没有必要维护整个凸包,只维护原来的点还有它关于原点对称点的上凸壳就可以了
注意C++做布尔运算的短路机制==
#include<stdio.h> #include<set> using namespace std; typedef long long ll; struct point{ int x,y; point(int a=0,int b=0){x=a;y=b;} }p[100010]; point operator-(point a,point b){return point(a.x-b.x,a.y-b.y);} ll operator*(point a,point b){return(ll)a.x*b.y-(ll)a.y*b.x;} struct cmp{ bool operator()(point a,point b){return a.x==b.x?a.y<b.y:a.x<b.x;} }; struct conv{ typedef set<point,cmp> st; typedef st::iterator si; st s; si it; si pre(si i){ i--; return i; } si nex(si i){ i++; return i; } point d[100010]; int M,siz; void clear(){s.clear();siz=0;} bool insert(point p){ it=s.lower_bound(p); if(it!=s.begin()&&it!=s.end()&&(p-*pre(it))*(*it-p)>=0)return 0; M=0; if(it!=s.begin()){ it--; while(it!=s.begin()&&(*it-*pre(it))*(p-*it)>=0)d[++M]=*(it--); } it=s.lower_bound(p); if(it!=s.end()){ while(nex(it)!=s.end()&&(*it-p)*(*nex(it)-*it)>=0)d[++M]=*(it++); } while(M)s.erase(d[M--]); s.insert(p); siz=s.size(); return 1; } }c1,c2; int n; void work(){ int i; bool f1,f2; for(i=1;i<=n;i++)scanf("%d%d",&p[i].x,&p[i].y); c1.clear(); c2.clear(); for(i=1;i<=n;i++){ f1=!c1.insert(p[i]); f2=!c2.insert(0-p[i]); if(f1&&f2){ puts("Impossible"); return; } } c1.clear(); c2.clear(); for(i=n;i>0;i--){ f1=!c1.insert(p[i]); f2=!c2.insert(0-p[i]); if(f1&&f2){ puts("Impossible"); return; } } puts("Possible"); } int main(){ while(~scanf("%d",&n))work(); }
[xsy2238]snake的更多相关文章
- [LeetCode] Design Snake Game 设计贪吃蛇游戏
Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...
- Leetcode: Design Snake Game
Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...
- 2101 Problem A Snake Filled
题目描述 “What a boring world!”Julyed felt so bored that she began to write numbers on the coordinate pa ...
- 图像分割之(五)活动轮廓模型之Snake模型简介
在"图像分割之(一)概述"中咱们简单了解了目前主流的图像分割方法.下面咱们主要学习下基于能量泛函的分割方法.这里学习下Snake模型简单的知识,Level Set(水平集)模型会在 ...
- Epic - Snake Sequence
You are given a grid of numbers. A snakes equence is made up of adjacent numbers such that for each ...
- Codeforces Round #290 (Div. 2) A. Fox And Snake 水题
A. Fox And Snake 题目连接: http://codeforces.com/contest/510/problem/A Description Fox Ciel starts to le ...
- 图像切割之(五)活动轮廓模型之Snake模型简单介绍
图像切割之(五)活动轮廓模型之Snake模型简单介绍 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了 ...
- 353. Design Snake Game
贪食蛇. GAME OVER有2种情况,1是咬到自己,2是出界. 1)用QUEUE来保留占据的格子,每走一格就添加1个,然后POll()最后一个. 做一个一样的SET来check要走的格子是不是已经在 ...
- 切割图像(五)主动轮廓模型Snake简要模型
切割图像(五)主动轮廓模型Snake简要模型 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了解了眼下 ...
随机推荐
- js_!和!!的使用
js中有些特殊的数据(“” 0 null undefined NaN),请求后台返回的数据中往往都有一些这样的数据,需要对这些数据进行过滤. 过滤代码 var a = 0;//0 "&quo ...
- ms17-010 攻击win7漏洞复现
只是为了好玩重新写一篇.利用还是很简单的. 将下载下来的rb放置在:/usr/share/metasploit-framework/modules/exploits/windows/smb/ 目录下 ...
- 数据库===轻量级mysql数据库管理工具
已经上传至: https://download.csdn.net/download/bo_mask/10276952
- Python数据处理实战
一.运行环境 1.python版本 2.7.13 博客代码均是这个版本2.系统环境:win7 64位系统 二.需求 对杂乱文本数据进行处理 部分数据截图如下,第一个字段是原字段,后面3个是清洗出的字段 ...
- 【VIPM技巧】多版本LabVIEW无法连接问题
前言 今天小编突然用到一个Toolkit,遂去VIPM上搜索,虽然可以找到但是无法连接成功LabVIEW,配置好一阵才解决.这里记录一下整个思路,供需要的人参考 问题记录 VIMP连接超时 问题解决 ...
- HDU 3669 Cross the Wall(斜率DP+预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3669 题目大意:有n(n<=50000)个矩形,每个矩形都有高和宽,你可以在墙上最多挖k个洞使得 ...
- hdu 1428(很好的一道题,最短路+记忆化搜索)
漫步校园 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- Laravel通过Swoole提升性能
1.安装配置laravel 1.1.composer下载laravel composer create-project --prefer-dist laravel/laravel blog " ...
- Qtp测试中的密码问题
Qtp中,一般录制的脚本进行回放的时候就会遇到各种各样的问题,导致回放不能顺利进行,比如这次我在录制一个简单的登陆脚本的时候,就遇到了这样的问题: [遇到问题] 1, 录制好的脚本中的密码不能正常输 ...
- CentOS7配置sentinel高可用redis
redis哨兵:用于管理和实现多个redis组实现高可用,sentinel哨兵只监控主节点,因为主节点上有所有的从节点信息,当master节点发生故障,sentinel之间会进行投票选举一个slave ...