题目大意:
  给你一个简单多边形和若干个点,问每个点在多边形内还是外。

思路:
  一开始没看清楚题,写了一个叉积法,事实上叉积法只能用来处理凸多边形与点的关系。
  考虑一个射线法。
  从这个点水平往左作一条射线,如果与多边形相交次数为偶数,则在多边形外,否则在多边形内。
  考虑一些特殊情况:
    1.射线与多边形某条边重合,不算。
    2.射线经过某个顶点,只能够算一次。
  对于第一种情况,我们只需要判一下是否平行即可,对于第二种情况,我们对于多边形上的边区分一下上顶点和下顶点即可,上顶点算,下顶点不算。

 #include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=;
struct Point {
double x,y;
};
Point p[N];
int main() {
int n;
while(~scanf("%d",&n)) {
for(register int i=;i<n;i++) {
p[i]=(Point){getint(),getint()};
}
for(register int m=getint();m;m--) {
const Point q=(Point){getint(),getint()};
int cnt=;
if(p[].y==p[n-].y) {
} else if(p[].x==p[n-].x) {
if(p[].x<q.x&&std::min(p[].y,p[n-].y)<q.y&&q.y<=std::max(p[].y,p[n-].y)) {
cnt++;
}
} else if((q.y-p[n-].y)/((p[].y-p[n-].y)/(p[].x-p[n-].x))+p[n-].x<=q.x) {
if(std::min(p[].y,p[n-].y)<q.y&&q.y<=std::max(p[].y,p[n-].y)) {
cnt++;
}
}
for(register int i=;i<n;i++) {
if(p[i].y==p[i-].y) {
} else if(p[i].x==p[i-].x) {
if(p[i].x<q.x&&std::min(p[i].y,p[i-].y)<q.y&&q.y<=std::max(p[i].y,p[i-].y)) {
cnt++;
}
} else if((q.y-p[i-].y)/((p[i].y-p[i-].y)/(p[i].x-p[i-].x))+p[i-].x<=q.x) {
if(std::min(p[i].y,p[i-].y)<q.y&&q.y<=std::max(p[i].y,p[i-].y)) {
cnt++;
}
}
}
puts((cnt&)?"Yes":"No");
}
}
return ;
}

[HDU1756]Cupid's Arrow的更多相关文章

  1. Cupid's Arrow[HDU1756]

    Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  2. HDU 1756 Cupid's Arrow 判断点在多边形的内部

    Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  3. hdu 1756:Cupid's Arrow(计算几何,判断点在多边形内)

    Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  4. HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内

    LINK:Cupid's Arrow 前置函数 atan2 返回一个向量的幅角.范围为[Pi,-Pi) 值得注意的是 返回的是 相对于x轴正半轴的辐角. 而判断一个点是否在一个多边形内 通常有三种方法 ...

  5. HDU 1756 Cupid's Arrow( 判断点在多边形的内外 )

    链接:传送门 思路:判断每支箭是否在多边形内,计算几何点定位中水题,不清楚下面的代码能不能适用于给定点的顺序不确定( 既不是顺时针又不是逆时针 ) /************************* ...

  6. 【HDOJ】1756 Cupid's Arrow

    图论,点在多边形内部的判定. /* 1756 */ #include <iostream> #include <string> #include <map> #in ...

  7. HDU 1756 Cupid's Arrow (几何问题,判定点在多边形内部)

    题意:中文的么,自己看喽. 析:很容易明白是判定点是不是在多边形内部,一般是向量来判定,我一开始用点在向量的右侧,因为是顺时针给的,只要点全在外侧或边上, 就可以,暴力一下就ok.由于这个是浮点数,一 ...

  8. ACM第一阶段学习内容

    一.知识目录 字符串处理 ................................................................. 3 1.KMP 算法 .......... ...

  9. 下载恶意pcap包的网站

    说几个我经常用的,免费的:1.  Malware  Traffic  Analysis:  http://www.malware-traffic-analysis.net/2018/index.htm ...

随机推荐

  1. setTimeOut和闭包

    掘金上看到一个setTimeout与循环闭包的思考题.拿过来看了下,一方面了解settimeout的运行机制,还有就是js闭包的特性.关于闭包,有如下解释: 在这里写一点我对闭包的理解.理解闭包的关键 ...

  2. 今天安装了arch,感觉不错,这速度可以

    虽然没有想想中的那么那么快,不过已经可以了 总结一下遇到的问题以及i自己安装的软件 1.u盘硬盘不能自动挂载 安装gvfs 2.不能读写挂载 安装ntfs-3g 3.时间不对 照wiki上的说 #ln ...

  3. Centos 7 smb 安装使用

    安装: yum install samba 添加smb用户: smbpasswd -a root /etc/samba/smb.conf 追加: [public] path = / valid use ...

  4. PHP 接入(第三方登录)QQ 登录 OAuth2.0 过程中遇到的坑

    前言 绝大多数网站都集成了第三方登录,降低了注册门槛,增强了用户体验.最近看了看 QQ 互联上 QQ 登录的接口文档.接入 QQ 登录的一般流程是这样的:先申请开发者 -> 然后创建应用(拿到一 ...

  5. LeetCode解题报告—— Search in Rotated Sorted Array & Search for a Range & Valid Sudoku

    1. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated(轮流,循环) at so ...

  6. poj 1426(同余搜索)

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26926   Accepted: 111 ...

  7. python Mixin 是个啥?

    内容待添加... 参考文章: [1][python] Mixin 扫盲班

  8. ceph在扩展mon节点时,要注意的问题

    我开始也是一步一步的按官方文档操作. 但后来还是遇到了问题. 当我要扩展mon节点时,死活出错. (我就一共用了三个节点ceph-admin, ceph-node1, ceph-node2) 比如: ...

  9. php 公历农历互相转换

    废话不多,直接上代码 <?php class Lunar { /** * Created by 闻海南. * User: timeless * Date: 2018-5-29 * Time: 上 ...

  10. 弹出框美化 alert样式美化

    引用style.css和ui.js就可以直接用以下接口调用!(文末附完整代码) alert_带标题: mizhu.alert('alert_带标题', '这是alert效果'); alert_带图标: ...