uva10256(计算几何)
省选前练模板系列;
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
const double eps=1e-,inf=1e9;
int n1,n2,m1,m2,pp;
double mi;
int dcmp(double x){if(fabs(x)<eps)return ;return x<?-:;}
struct vec{
double x,y,ang;
vec(){};
vec(double a,double b){x=a,y=b;}
vec operator-(vec a){return vec(x-a.x,y-a.y);}
vec operator+(vec a){return vec(x+a.x,y+a.y);}
bool operator<(const vec&a)const{
return dcmp(x-a.x)<||(dcmp(x-a.x)==&&y<a.y);
}
}p1[maxn],p2[maxn],ch1[maxn],ch2[maxn],p0,t1,t2,t3;
double cross(vec a,vec b){return a.x*b.y-b.x*a.y;}
double dot(vec a,vec b){return a.x*b.x+a.y*b.y;}
bool onli(vec p,vec a1,vec a2){
if(p.x=a1.x&&p.y==a1.y)return ;
if(p.x=a2.x&&p.y==a2.y)return ;
return dcmp(cross(a1-p,a2-p))==&&dcmp(dot(a1-p,a2-p))<;
}
bool jiao(vec a1,vec a2,vec b1,vec b2){
if(!(min(a1.x,a2.x)<=max(b1.x,b2.x)&&min(b1.y,b2.y)<=max(a1.y,a2.y)&&min(b1.x,b2.x)<=max(a1.x,a2.x)&&min(a1.y,a2.y)<=max(b1.y,b2.y)))
return ;
double c1=cross(a2-a1,b1-a1),c2=cross(a2-a1,b2-a1);
double c3=cross(b2-b1,a1-b1),c4=cross(b2-b1,a2-b1);
return dcmp(c1)*dcmp(c2)<=&&dcmp(c3)*dcmp(c4)<=;
}
bool inbao(vec p,vec* a,int n){
if(dcmp(cross(a[]-a[],p-a[]))<||dcmp(cross(a[n-]-a[],p-a[]))>)return ;
if(dcmp(cross(a[]-a[],p-a[]))==){
if(onli(p,a[],a[]))return ;
else return ;
}
if(dcmp(cross(a[n-]-a[],p-a[]))==){
if(onli(p,a[],a[n-]))return ;
else return ;
}
int l=,r=n-;
while(l<r){
int mid=l+r>>;
if(dcmp(cross(p-a[],a[mid]-a[]))>)r=mid;
else l=mid+;
}
//cout<<l<<endl;
if(cross(a[l]-a[l-],p-a[l-])>=)return ;
return ;
}
int build(vec *p,int n,vec *ch){
sort(p,p+n);
int m=;
for(int i=;i<n;++i){
while(m>&&cross(ch[m-]-ch[m-],p[i]-ch[m-])<=)m--;
ch[m++]=p[i];
}
int k=m;
for(int i=n-;i>=;--i){
while(m>k&&cross(ch[m-]-ch[m-],p[i]-ch[m-])<=)m--;
ch[m++]=p[i];
}
if(n>)m--;
return m;
}
void solve(){
for(int i=;i<n1;++i)scanf("%lf%lf",&p1[i].x,&p1[i].y);
for(int i=;i<n2;++i)scanf("%lf%lf",&p2[i].x,&p2[i].y);
if(n1==&&n2==){
if(p1[].x==p2[].x&&p1[].y==p2[].y){puts("No");return;}
else{puts("Yes");return;}
}
m1=build(p1,n1,ch1),m2=build(p2,n2,ch2);
if(m2>){
for(int i=;i<m1;++i)if(inbao(ch1[i],ch2,m2)){puts("No");return;}
}
if(m1>){
for(int i=;i<m2;++i)if(inbao(ch2[i],ch1,m1)){puts("No");return;}
}
for(int i=;i<m1;++i)
for(int j=;j<m2;++j)
if(jiao(ch1[i],ch1[(i+)%m1],ch2[j],ch2[(j+)%m2])){
puts("No");return;
}
puts("Yes");
}
int main(){
while(scanf("%d%d",&n1,&n2)!=EOF&&n1){
solve();
}
return ;
}
/*
4 3
100 600
200 400
600 500
300 700
400 100
600 200
500 300
4 3
100 600
400 100
600 200
500 300
200 400
600 500
300 700
0 0
*/
uva10256(计算几何)的更多相关文章
- 【题解】The Great Divide [Uva10256]
[题解]The Great Divide [Uva10256] 传送门:\(\text{The Great Divide [Uva10256]}\) [题目描述] 输入多组数据,每组数据给定 \(n\ ...
- ACM/ICPC 之 计算几何入门-叉积-to left test(POJ2318-POJ2398)
POJ2318 本题需要运用to left test不断判断点处于哪个分区,并统计分区的点个数(保证点不在边界和界外),用来做叉积入门题很合适 //计算几何-叉积入门题 //Time:157Ms Me ...
- HDU 2202 计算几何
最大三角形 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- ACM 计算几何中的精度问题(转)
http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模 ...
- hdu 2393:Higher Math(计算几何,水题)
Higher Math Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)
Rescue The Princess Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Several days ago, a b ...
- [知识点]计算几何I——基础知识与多边形面积
// 此博文为迁移而来,写于2015年4月9日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxaq.html 1.前言 ...
- POJ 1106 Transmitters(计算几何)
题目链接 切计算几何,感觉计算几何的算法还不熟.此题,枚举线段和圆点的直线,平分一个圆 #include <iostream> #include <cstring> #incl ...
- TYVJ计算几何
今天讲了计算几何,发几道水水的tyvj上的题解... 计算几何好难啊!@Mrs.General....怎么办.... 这几道题都是在省选之前做的,所以前面的Point运算啊,dcmp啊,什么什么的,基 ...
随机推荐
- python的apidoc使用
一.apidoc的安装 npm install apidoc -g -g参数表示全局安装,这样在哪儿都能使用. 二.apidoc在python接口代码中的使用 def index(): "& ...
- java 下载网络文件
1.FileUtils.copyURLToFile实现: import java.io.File; import java.net.URL; import org.apache.commons.io. ...
- Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress
NodePort,LoadBalancer和Ingress之间的区别.它们都是将集群外部流量导入到集群内的方式,只是实现方式不同. ClusterIP ClusterIP服务是Kubernetes的默 ...
- Trie树详解(转)
特别声明 本文只是一篇笔记类的文章,所以不存在什么抄袭之类的. 以下为我研究时参考过的链接(有很多,这里我只列出我记得的): Trie(字典树)的应用——查找联系人 trie树 Trie树:应用于统计 ...
- Linux运维精华面试题
1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络.系统.数据库.开发.安全.监控于一身 ...
- ThinkPHP学习笔记
1.什么是框架? 特征一:是一对代码的集合: 特征二:一个半成品的应用: 特征三:包含了一些优秀的设计模式: 定义:框架是一堆包含了常量.方法和类等代码的集合,它是一个半成品的应用,只包含了一些项目开 ...
- 轻量级富文本编辑器wangEditor
开发公司一个系统的时候需要一个富文本编辑器,找了几个,最后选择这个,蛮不错的. 百度搜索wangEditor,进入官网根据所介绍的使用进行开发就可以了,很不错的一个工具.
- go语言学习逻辑运算符if判断,iota的理解
第一天学习go语言,首先吐槽一下,配置go语言浪费了我两个小时的时间 不是在百度,就是在百度的路上,这里介绍一下我的go语言的版本和开发平台 go语言1.12版本,之前没有用过在早的版本了首先记录一下 ...
- mRNA文库构建
mRNA文库构建 Posted: 三月 27, 2017 Under: Transcriptomics By Kai no Comments RNA-seq测序方法 在测mRNA过程中,首先要去 ...
- 201771010134杨其菊《面向对象程序设计java》第十周学习总结
第8章泛型程序设计学习总结 第一部分:理论知识 主要内容: 什么是泛型程序设计 泛型类的声明及实例化的方法 泛型方法的定义 ...