ZOJ1081:Points Within——题解
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1081
题目大意:给定一个点数为 n 的多边形,点按照顺序给出,再给出 m 个点,询问每个点是否在多边形内。
——————————————————————————————
计算几何开荒期,所以都算是板子吧……既然是板子那么题解自然也都是集网上之大成。
所以以后也就不多说了。正式往下看题解吧。
——————————————————————————————
这是一道求点是否在一个多边形内的题。
对这道题我们有两种算法,第二种太麻烦了就不讲了。
第一种为射线法:即我们有一个点,向左(右)水平做一道射线,求出射线与四边形交点个数,如果个数为奇数则在这里面。
但是如果交在线段端点上时我们需要规定交在边的下端点统计进答案或是交在边的上端点统计进答案(也就是保证一个点要么都被统计要么都不被统计)。
判断端点序号的坐标上下关系用叉乘,顺便可以判断该点是否在边上。
#include<cstdio>
#include<queue>
#include<cctype>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int M=;
const int N=;
const int INF=*N;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct point{//既是向量又是点
int x;
int y;
}q[N],p;
int n,m,cnt;
inline point getmag(point a,point b){
point s;
s.x=b.x-a.x;s.y=b.y-a.y;
return s;
}
inline int multiX(point a,point b){
return a.x*b.y-b.x*a.y;
}
inline int multiP(point a,point b){
return a.x*b.x+a.y*b.y;
}
bool pan(){
int sum=;
for(int i=;i<=n;i++){
int d=multiX(getmag(p,q[i]),getmag(p,q[i%n+]));
if(!d){//三点共线
if(multiP(getmag(p,q[i]),getmag(p,q[i%n+]))<=)return ;//是否在线段上
}
int d1=q[i].y-p.y;
int d2=q[i%n+].y-p.y;
if(d>&&d1>=&&d2<)sum++;
if(d<&&d1<&&d2>=)sum++;
}
if(sum%)return ;
return ;
}
int main(){
while(scanf("%d",&n)!=EOF&&n){
m=read();
cnt++;
if(cnt!=)putchar('\n');
for(int i=;i<=n;i++){
q[i].x=read();
q[i].y=read();
}
printf("Problem %d:\n",cnt);
for(int i=;i<=m;i++){
p.x=read();
p.y=read();
if(pan())puts("Within");
else puts("Outside");
}
}
return ;
}
ZOJ1081:Points Within——题解的更多相关文章
- ZOJ1081 Points Within 点和多边形的位置关系
ZOJ1081 给一个点和一个多边形 判断点在多边形内(边上)还是在多边形外 在多边形外的点引一条射线必然穿过多边形的两条边 而在多边形内的点则不一定. 当然凹多边形有特殊情况 但是总能找到对应位置关 ...
- ZOJ1081 Points Within
嘟嘟嘟 题面:给一个\(n\)个点的多边形和\(m\)个点,判断每一个点是否在多边形内. 解法:射线法. 就是从这个点引一条射线,如果与多边形有奇数个交点,则在多边形内部. 那么只用枚举每一条边,然后 ...
- 题解 CF576C 【Points on Plane】
题解 CF576C [Points on Plane] 一道很好的思维题. 传送门 我们看这个曼哈顿距离,显然如果有一边是按顺序排列的,显然是最优的,那另一边怎么办呢? 假如你正在\(ioi\)赛场上 ...
- [LeetCode]题解(python):149-Max Points on a Line
题目来源: https://leetcode.com/problems/max-points-on-a-line/ 题意分析: 在一个2D的板上面有很多个点,判断最多有多少个点在同一条直线上. 题目思 ...
- Codeforces 1140F Extending Set of Points 线段树 + 按秩合并并查集 (看题解)
Extending Set of Points 我们能发现, 如果把x轴y轴看成点, 那么答案就是在各个连通块里面的x轴的个数乘以y轴的个数之和. 然后就变成了一个并查集的问题, 但是这个题目里面有撤 ...
- [LeetCode] Max Points on a Line 题解
题意 Given n points on a 2D plane, find the maximum number of points that lie on the same straight lin ...
- Codeforces Round #624 (Div. 3) F. Moving Points 题解
第一次写博客 ,请多指教! 翻了翻前面的题解发现都是用树状数组来做,这里更新一个 线段树+离散化的做法: 其实这道题是没有必要用线段树的,树状数组就能够解决.但是个人感觉把线段树用熟了会比树状数组更有 ...
- 「题解」「CF850A」Five Dimensional Points
题目 点这里 题解 本题暴力可过,细节不必多说. 这里我主要是说明一下为什么当 \(n>11\) 时可以直接输出 \(0\) . 首先,思考二维空间中,我们能保证最多能同时存在多少点,而还有好点 ...
- CodeForces 430A Points and Segments (easy)(构造)题解
题意:之前愣是没看懂题意...就是给你n个点的坐标xi,然后还规定了Li,Ri,要求给每个点染色,每一组L,R内的点红色和黑色的个数不能相差大于1个,问你能不能染成功,不能输出-1,能就按照输入的顺序 ...
随机推荐
- WEB框架概述(译)
在学习WEB框架之前,我个人觉得需要搞清楚一件事:什么是WEB框架?在网上找了很多资料,觉得什么是WEB框架这篇文章讲的比较全面而清晰,本文作者Jeff Knupp. 全文如下: Web 应用框架,或 ...
- iOS WKWebView添加进度条02
之前写了一个是关于webview添加进度条的,现在补一个WKWebView进度条. //添加一个全局属性 @property(nonatomic,strong)CALayer *progresslay ...
- 「日常训练」湫湫系列故事——设计风景线(HDU-4514)
题意与分析 中文题目,木得题意的讲解谢谢. 然后还是分解成两个任务:a)判环,b)找最长边. 对于这样一个无向图,强行转换成负权然后bellman-ford算法求最短是难以实现的,所以感谢没有环--我 ...
- Oracle作业练习题
第一问 //登陆scott用户 //解锁 alter user scott account unlock; //给用户申请密码 alter user scott identified by tiger ...
- 【system.string】使用说明
对象:system.string 说明:提供一系列针对字符串类型的操作 目录: 方法 返回 说明 system.string.isBlank( string ) [True | False] 检测参 ...
- 【递归入门】组合的输出:dfs
题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r < = n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数. 现要求你不用递归的方 ...
- sql STUFF 分组
---将sql想关的数据放到一个字段里 select r.Region_Name, )) [text()] from City c2 inner join Region as r2 on c2.Reg ...
- 初学c#(又要打代码了好难)
因为我原来从没有学过C#,所以要重新看一个语言的基本语法,仔细阅读了老师的作业要求,发现第一个10分的作业如果要用c语言写我是可以完成的,于是定个小目标就是在周日前完成作业的第一步.今天我在菜鸟教程的 ...
- ACM 第二天
A - Mishka and Contest Mishka started participating in a programming contest. There are n problems i ...
- RXSwift--登录注册那点事
在iOS学习中登录注册是一个万能的可以拿出来实战的demo.接下来我们就从登录开始入手,PS:如果你对RXSwift中的概念和一些常用的函数不清楚可以参考这篇文章(可能打开比较慢请耐心等待).开始直接 ...