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

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;
}

  

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

  1. JZYZOJ1535 [haoi2014]穿越封锁线

    http://172.20.6.3/Problem_Show.asp?id=1535 整体来说是道水题,但是穿过点的判定把我坑得wa了两次,考场上这可是40分的水分啊啊啊. 开始的错误想法:排序后向上 ...

  2. 崽崽帮www.zaizaibang.com精选3

    [景山远洋美国交换生随笔]异国他乡的感触 [成都亲子活动]可能是成都最全最好的亲子活动了! 黄平-儿科 @体育活动 下雪天乐翻天之穿越封锁线 北京育翔小学的前世今生 武汉儿科类中医口碑榜 南宁周边农家 ...

  3. android穿越之旅--如何弹出一个非比寻常的窗体

    上一篇中介绍了一种闻所未闻在android执行java命令的方法,虽然这是一种非常"高级"的技术,然后并没有什么卵用,因此被移除了博客园首页.实际上也并不是一点用处也没有,对已立即 ...

  4. 如何穿越到android底层

    对于android开发,实际上大部分工作都是在应用层,但为了体现"技术含量",以及"知其所以然",以便在遇到问题是不至于束手无策.因此有必要了解底层的工作机制. ...

  5. 开发技巧-Java通过HttpProxy实现穿越

    需求描述     在正常的项目开发需求中,连接远程服务器的场景一般有二:     1  自家实现的http服务器,api接口都已经约定好:     2  开发平台服务,通常如新浪.百度云等平台提供的r ...

  6. P2P NAT检测和穿越方式

    一.      NAT类型 本文转自:http://www.cnblogs.com/hummersofdie/archive/2013/05/21/3090163.html  1.基本的NAT类型:只 ...

  7. NAT原理与NAT穿越

    最近在看东西的时候发现很多网络程序中都需要NAT穿越,特意在此总结一下. 先做一个约定: 内网A中有:A1(192.168.0.8).A2(192.168.0.9)两用户 网关X1(一个NAT设备)有 ...

  8. [转]SIP穿越NAT&FireWall解决方案

    原文链接(也是转载)http://blog.csdn.net/yetyongjin/article/details/6881491.我修改了部分错字.   SIP从私网到公网会遇到什么样的问题呢? 1 ...

  9. 穿越泥地(mud) (BFS)

    问题 C: 穿越泥地(mud) 时间限制: 1 Sec  内存限制: 128 MB提交: 16  解决: 10[提交][状态][讨论版] 题目描述 清早6:00,FJ就离开了他的屋子,开始了他的例行工 ...

随机推荐

  1. 洛谷——P3252 [JLOI2012]树

    P3252 [JLOI2012]树 题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度 ...

  2. FileChannel指南

    推荐关注公众号:锅外的大佬 每日推送国外技术好文,帮助每位开发者更优秀地成长 原文链接:https://www.baeldung.com/java-filechannel 作者:baeldung 译者 ...

  3. Tomcat、MySQL的安装与配置

    JAVA环境配置 下载安装jdk(Java Development Kit) 配置安装环境 右键计算机——>属性——>高级系统设置——>环境变量——>新建 变量名:  JAVA ...

  4. Android开发者选项——Gpu呈现模式分析

    对于Android用户来说,无论你用的什么品牌的手机,在开发者选项中都能发现“玄学曲线”的开关,之所以称其为玄学曲线,还是因为它被很多网友用于测试一个说不清道不明的东西——流畅度.到底多流畅才叫流畅, ...

  5. 9.【nuxt起步】-scroll分页加载

    面是单页,下面实现一个列表页和分页加载的例子 1.新建pages/list.vue <template> <div> 分页加载列表页面 </div> </te ...

  6. 从TCP协议的原理来谈谈rst复位攻击

    在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接.四次握手如何把全双工的连接关闭掉.滑动窗体是怎么数据传输的.TCP的flag标志位里RST在哪些情况下出现.以下我会画一些尽量简化的 ...

  7. Oracle数据库有用函数

    有用函数 DECODE 语法例如以下: DECODE(value, if1, then1, if2,then2,if3,then3, . . . else )  Value 代表某个表的不论什么类型的 ...

  8. gulp-gulpfile.js语法说明

    关于gulpfile文件: 直接上代码吧!! /*! * gulp * $ npm install gulp gulp-ruby-sass gulp-cached gulp-uglify gulp-r ...

  9. muduo::Connector、TcpClient分析

    Connector TcpClient Connector Connector用来发起连接. 在非堵塞网络中,主动发起连接比被动接收连接更为复杂,由于要考虑错误处理,还要考虑重试. 主要难点在于 1. ...

  10. cuda9,cuda8分享百度云下载

    一.文件名称: md5-cuda9cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.debcuda-repo-ubuntu1604-9-0-local_9. ...