题意:给定一条折线,问能否在不扭曲它的情况下让它完全通过一个小孔

这个条件就是:过折线上任意一点$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的更多相关文章

  1. [LeetCode] Design Snake Game 设计贪吃蛇游戏

    Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...

  2. Leetcode: Design Snake Game

    Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...

  3. 2101 Problem A Snake Filled

    题目描述 “What a boring world!”Julyed felt so bored that she began to write numbers on the coordinate pa ...

  4. 图像分割之(五)活动轮廓模型之Snake模型简介

    在"图像分割之(一)概述"中咱们简单了解了目前主流的图像分割方法.下面咱们主要学习下基于能量泛函的分割方法.这里学习下Snake模型简单的知识,Level Set(水平集)模型会在 ...

  5. Epic - Snake Sequence

    You are given a grid of numbers. A snakes equence is made up of adjacent numbers such that for each ...

  6. 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 ...

  7. 图像切割之(五)活动轮廓模型之Snake模型简单介绍

    图像切割之(五)活动轮廓模型之Snake模型简单介绍 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了 ...

  8. 353. Design Snake Game

    贪食蛇. GAME OVER有2种情况,1是咬到自己,2是出界. 1)用QUEUE来保留占据的格子,每走一格就添加1个,然后POll()最后一个. 做一个一样的SET来check要走的格子是不是已经在 ...

  9. 切割图像(五)主动轮廓模型Snake简要模型

    切割图像(五)主动轮廓模型Snake简要模型 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了解了眼下 ...

随机推荐

  1. 逃生(HDU4857 + 反向拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 题面是中文题面,就不解释题意了,自己点击链接去看下啦~这题排序有两个条件,一个是按给定的那个序列 ...

  2. 父元素与子元素之间的margin-top问题(css hack)

    hack: 父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. hytml代码: &l ...

  3. windows下 nginx安装 使用

    介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器. 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络 ...

  4. A题 hdu 1235 统计同成绩学生人数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1235 统计同成绩学生人数 Time Limit: 2000/1000 MS (Java/Others) ...

  5. netcat、nc工具随记

    netcat又称nc工具,其最主要的作用就是建立连接并返回两个数据流,剩下的就看各位的想象力了,想象力是很重要的,这也是这个工具的强大之处的所在,所以重要的东西才要说三遍,想象力! 具体参数如下: - ...

  6. 虚拟机出现intel vt -x 处于禁用状态打不开处理方式

    处理方式 . 1 进入bios 以华硕主板为例 进入高级模式找到cpu虚拟技术 打开虚拟技术支持 其它电脑找到这个

  7. 函数导出在kvm_intel.ko,kvm.ko不共享

    KVM一共包含了三个内核模块,kvm_intel.ko,kvm_amd.ko,kvm.ko.其中两个重要文件x86.c和vmx.c在编译后分别会生成kvm_intel.ko和kvm.ko两个内核模块, ...

  8. linux和ubuntu防火墙相关命令

    1.永久有效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2.即刻生效 开启: service iptables start 关闭: se ...

  9. centos7下opencv的安装

    os:centos7 opencv:opencv3.0.0 for linux reference:http://www.cnblogs.com/xixixing/p/6096057.html det ...

  10. JS监控手机或APP返回事件

    做微信项目的时候,发现在Ios微信浏览器左上角有个返回按钮,但是点击返回时不稳定,跳到不该跳的页面.网上搜了一个捕获返回事件的JS代码,记录下来,便于以后查看. <span style=&quo ...