[haoi2014]穿越封锁线

这题需要注意的一点是射线法需要考虑边界,而且题目对边界的限制极为严格.

dcmp(v[i%n].x-x)<=0&&dcmp(v[(i+1)%n].x-x)>0
dcmp(v[i%n].x-x)>0&&dcmp(v[(i+1)%n].x-x)<=0

这是我写的版本.

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iomanip>
using namespace std;
#define LL long long
#define up(i,j,n) for(int i=j;i<=n;i++)
#define pii pair<int,int>
#define db double
#define eps 1e-4
#define FILE "dealing"
int read(){
	int x=0,f=1,ch=getchar();
	while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
	while(ch<=‘9‘&&ch>=‘0‘){x=(x<<1)+(x<<3)+ch-‘0‘,ch=getchar();}
	return x*f;
}
const int maxn=22000,inf=1000000000;
bool cmin(db& a,db b){return a>b?a=b,true:false;}
int n;
struct vec {
	db x,y;
	vec(db x=0,db y=0):x(x),y(y){}
}v[maxn];
int dcmp(db v){if(fabs(v)<eps)return 0;return v<0?-1:1;}
db x,y;
db s[5];
db gety(vec v,vec b,db x){
	db k=(b.y-v.y)/(b.x-v.x);
	db d=v.y-v.x*k;
	return x*k+d;
}
int main(){
	freopen(FILE".in","r",stdin);
	freopen(FILE".out","w",stdout);
	n=read();
	up(i,0,n-1)v[i].x=read(),v[i].y=read();
	x=read(),y=read();
	int wn=1;db ans=0,last=y;
	db Min=inf;int k=0;
	up(i,0,n-1)
	if(((v[i%n].x<x&&v[(i+1)%n].x>x)||(v[i%n].x>x&&v[(i+1)%n].x<x))&&gety(v[i%n],v[(i+1)%n],x)>y&&cmin(Min,gety(v[i],v[(i+1)%n],x)-y)){k=i;}
	up(i,k,k+n-1){
		if(dcmp(v[i%n].x-x)<=0&&dcmp(v[(i+1)%n].x-x)>0&&dcmp(gety(v[i%n],v[(i+1)%n],x)-y)>0){
			s[wn]+=gety(v[i%n],v[(i+1)%n],x)-last;
			last=gety(v[i%n],v[(i+1)%n],x);
			wn++;
		}
		else if(dcmp(v[i%n].x-x)>0&&dcmp(v[(i+1)%n].x-x)<=0&&dcmp(gety(v[i%n],v[(i+1)%n],x)-y)>0){
			s[wn]+=gety(v[i%n],v[(i+1)%n],x)-last;
			last=gety(v[i%n],v[(i+1)%n],x);
			wn--;
		}
	}
	if(wn==1)printf("%d\n",(int)fabs(s[2]+s[0]));
	else printf("%d\n",fabs(s[1]));
	return 0;
}

  

时间: 2024-10-22 05:00:59

[haoi2014]穿越封锁线的相关文章

JZYZOJ1535 [haoi2014]穿越封锁线

http://172.20.6.3/Problem_Show.asp?id=1535 整体来说是道水题,但是穿过点的判定把我坑得wa了两次,考场上这可是40分的水分啊啊啊. 开始的错误想法:排序后向上扫一遍,通过边就转换加或不加这一段的状态,通过点就不转换.错误想法没有考虑到折点而非转点的情况.正确想法与错误的只有点的判定不同:点的判定是如果这个点连接的两条边是在穿越线的一侧,则通过这点后加或不加的状态不变,否则转换. 还是逻辑太弱. 代码 1 #include<iostream> 2 #in

崽崽帮www.zaizaibang.com精选3

[景山远洋美国交换生随笔]异国他乡的感触 [成都亲子活动]可能是成都最全最好的亲子活动了! 黄平-儿科 @体育活动 下雪天乐翻天之穿越封锁线 北京育翔小学的前世今生 武汉儿科类中医口碑榜 南宁周边农家乐摘果大攻略!收藏备用 济南通讯录 首都医科大学附属北京妇产医院 北京妇幼保健院简介 隐藏在深圳繁华都市里的世外桃源,竟如此美! 经五教育集团经五路小学2009级毕业典礼 @大班精彩活动 西式美味—香肠意面 看病丨重庆这些比较"牛"的医院科室 [秋游走起]苏州秋冬旅游行程表 幼儿园的点滴—

穿越300km沙漠:卡萨帝用7星服务做实体经济升级样板

3月31日,家住新疆克拉玛依戈壁沙漠"无人区"公路守护站的刘女士购买了1台卡萨帝洗衣机,在第2天中午,卡萨帝服务工程师就将洗衣机准时送达用户家.穿越300多公里的沙漠公路.冒着零下20多度的严寒,安装师傅的汽车也已经被沙石砸损,刘女士不禁为卡萨帝的七星级服务标准竖起大拇指,而这只是卡萨帝七星级服务的其中一个缩影.其背后,是由卡萨帝完备的服务链条作为支撑的7星级高端服务体系. 七星级服务:基于传统服务的"超级服务" 在过去的很长一段时间里,产业对"服务&qu

《星际穿越》关于时间与空间的思考

看完了近期比较火的影片星际穿越,重新刷新了我对世界对宇宙的价值观,可以说这是一部较为实体化把理论把宇宙呈现在观众眼中的影片,让那些不太明白理论的人同样可以感受到宇宙的奥秘,穿梭在宇宙之间,领略着超乎自然神奇力量的世界里,真是一个心旷神怡.相信每一个看完影片的观众都会为之称赞,称赞着自然法则的规律,称赞着科学的伟大,称赞着导演的构思与想象力.影片在现在看来太超前了,也尊重科学,对于科学理论的描述还是最大限度的贴近现有的物理学,除非真的到了那种无法解释而电影又必须用到的地方,导演才展开强大的想象力.

《长安十二时辰》。5星。大唐首都反恐24小时。基本是大片剧本。有创意的穿越架空小说。

有创意,基本是大片剧本,3分钟一转折,5分钟一高潮.主要故事是发生在大唐首都的反恐24小时,主人公身陷囹圄,遭遇黑白两道的追捕,多次万分危险差点送命,最终挫败了一场惊天大阴谋,挽救了危局. 剧本我给4星,涉及到的唐朝无数政治.经济.军事.生活.娱乐的细节我给5星. 本书基本可以归入架空小说,虚构了一段历史,最终由于主人公的努力,让历史按原来的轨迹走了下去.但是细看有一些情节可以说是穿越了.主要有三个穿越的情节:用旗语和鼓声传递信息.用石油制作炸弹.用狗去根据气味去跟踪. 跟所有的侦破小说一样,最

标准H.460公私网穿越视频解决方案

一.概述 H.460协议是一种网络通信协议,主要用于音视频的网络穿越,可以解决客户私网到公网,以及公网到私网的互相通信. 大连羽化集团是中国较大的零售业集团之一.目前羽化集团百货店已达20多家,营业面积一般在2万—6万平方米之间,组成了羽化集团.羽化集团突破传统百货的单一模式,形成了以“东北第一店”,并实现了百货店的连锁化经营.专业化管理.多样化发展.随着业务的发展建设1套远程会议系统,势在必行. 华为视讯系统自1993年成立以来,经过了近20年的深厚技术积累,视音频技术已经在全世界处于业界领先

腾讯QQ空间穿越时光轴3D特效

<DOCTYPE html> <html> <head> <title>腾讯QQ空间穿越光轴3D特效</title> <style> *{margin:0;padding:0;} body{ background-image:url("images/bg.png") fixed;//拖动鼠标图片不会上下移动 height:2000px; } .con{ width:1000px; /*heigth:500px;*/

第一章 穿越《编码时间》

宋海,是个标准的宅男,基本上除了上班就是宅在家里,不过他有自己的爱好,编程.他宅在家里不像其他人男孩那样打游戏,而是看编程的书,我去香港的论坛逛逛. 但是在别人的眼中,他就是苦逼的码农,整天在家里码代码. 宋海,他不像其他码农那样,只精通一样,他算是全栈工程师,前端,后端,服务器,慎重UI 他都会. 最近他完成了公司给他准备的一个大项目,也顺利上线了,慷慨的老板还给他发了丰富的奖金,顺便放了他几天小长假. 本来他准备宅在家里的,但是母亲要给他介绍女朋友,他最烦这个了,他要找的就是,遇到才是最美好

我与小娜(02):乘坐超速高铁,穿越时空60年

我与小娜(02):乘坐超速高铁,穿越时空60年?       2月2日早上,我与小娜乘坐地铁4号线赶往北京南站.9点30分开始检票,车站规定:凡电子身躯者,一律免票.我与小娜顺利登车,赶往南京. 10点整,列车慢慢加速启动.这时,列车服务员过来叫小娜钻进一个“小口袋”,算是她的“座位”,  列车加速期间,小娜在“小口袋“里面小声地问我:追回60年时间,需要几个小时?我对她说,大约4个多小时.       下午2点多一点,列车到达南京市浦口车站.这是我们航程的终点站,时间是1955年的夏天,外面天