【计算几何】Codeforces Round #113 (Div. 2)-B. Polygons
来源:互联网 发布:搬瓦工vps建站 编辑:程序博客网 时间:2024/04/30 23:39
其实是很裸的一道几何题,题目要求的就是判断一个小的多边形是否完全且严格(两个多边形不能有交点)包含在另一个凸多边形里面。而解决的方法有很多,我这里用到的就是判断一个点是否完全且严格包含在一个多边形内,判断的时候用到了二分和叉积。
题目
#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define N 100005struct node{ int x,y;}p[N];__int64 xcross(node t,node t1,node t2){ return (__int64)(t1.x-t.x)*(t2.y-t.y)-(__int64)(t2.x-t.x)*(t1.y-t.y);}int n;bool check(node t){ if(xcross(t,p[0],p[n-1])==0)return false; //判断是否在线(0,1)上 if(xcross(t,p[1],p[0])==0)return false; //判断是否在线(0,n-1)上 int l=0,r=n-1,best; while(l<=r) { int m=(l+r)/2; if(xcross(t,p[m],p[0])>=0) { best=m; //这里得到的best是和点t最接近的那条边的一段 l=m+1; } else r=m-1; } if(xcross(t,p[best],p[best+1])>=0)return false; //判断点t在线(best,best+1)的那一边 return true;}int main(){ //freopen("a.txt","r",stdin); scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d%d",&p[i].x,&p[i].y); int m; scanf("%d",&m); bool flag=true; while(m--) { node t; scanf("%d%d",&t.x,&t.y); if(flag)flag=check(t); } if(flag)printf("YES\n"); else printf("NO\n"); return 0;}
- 【计算几何】Codeforces Round #113 (Div. 2)-B. Polygons
- Codeforces Round #291 (Div. 2) -- B. Han Solo and Lazer Gun (计算几何~暴力)
- Codeforces Round #388(Div. 2)B. Parallelogram is Back【计算几何】
- Codeforces Round #287 (Div. 2)B(几何)
- Codeforces Round #346 (Div. 2)(D)计算几何
- Codeforces Round #357 (Div. 2) E 计算几何
- Codeforces Round #365 (Div. 2) C 计算几何
- Codeforces Round #340 (Div. 2) D. Polyline 计算几何,折线
- Codeforces Round #272 (Div. 2) B. Dreamoon and WiFi (超几何分布)
- Codeforces Round #385 (Div. 2) B. Hongcow Solves A Puzzle 几何、思维题
- Codeforces Round #340 (Div. 2) 617C Watering Flowers(计算几何)
- Codeforces Round #358 (Div. 2) E 计算几何 旋转卡壳求最大三角形面积
- Codeforces Round #365 (Div. 2) C. Chris and Road(计算几何+二分)
- Codeforces Round #365 (Div. 2) C. Chris and Road(计算几何+二分)
- Codeforces Round #340 (Div. 2) C. Watering Flowers 计算几何、圆和点
- Codeforces Round #357 (Div. 2) E. Runaway to a Shadow 计算几何
- Codeforces Round #409Div.2D. Volatile Kite(计算几何)
- Codeforces Round #409 (Div. 2) D. Volatile Kite 计算几何、凸多边形、线段类
- Java基础05-数组排序与查找
- 面向对象(OO)基础和原则
- 业界资讯 :flash player11 介绍
- Windows Phone开发(24):启动器与选择器之发送短信
- Linux USB subsystem --- USB create HCD
- 【计算几何】Codeforces Round #113 (Div. 2)-B. Polygons
- Unity3D GUI类接口
- 极限定律 My Algorithm Space AC自动机算法详解
- struts2配置文件中Action中的各属性的含义
- jQuery Dialog对话框事件
- 第六周实验报告3
- 在java中如何使用sphinx技术(coreseek)
- jquery插件手风琴效果
- HLFS: 基于HDFS和LFS技术的EBS开源实现