poj 3304
我老人家要开始玩几何了!
。这个题有点自闭。
就是问是否存在一条直线经过所有了n条线段,(有交点).
我老人家愚昧不可救药,想了想决定先求出来 这两条直线的交点,然后看是否在线段上。但是一直写不对。。。
看了看题解发现可以直接用叉积,显然如果没有交点,那么线段在直线的一边,所以叉积就是正的,否则小于等于0.
#include <iostream>
#include <cmath>
#include <cstdio>
typedef double db;
const db eps=1e-;
const db pi = acos(-);
int sign(db k){
if (k>eps) return ; else if (k<-eps) return -; return ;
}
int cmp(db k1,db k2){return sign(k1-k2);}
struct point{
db x,y;
db abs(){return sqrt(x*x+y*y);}
db dis(point k1){return ((*this)-k1).abs();}
point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
point operator *(db k1)const {return (point){x*k1,y*k1};}
point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}
point operator / (db k1) const{return (point){x/k1,y/k1};}
int operator == (const point &k1) const{return cmp(x,k1.x)==&&cmp(y,k1.y)==;}
};
db cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}
db dot(point k1,point k2){return k1.x*k2.x+k1.y*k2.y;}
struct Line{
point p[];
};
int inmid(db k1,db k2,db k3){return sign(k1-k3)*sign(k2-k3)<=;}
int inmid(point k1,point k2,point k3){//k3在[k1,k2]
return inmid(k1.x,k2.x,k3.x)&&inmid(k1.y,k2.y,k3.y);
}
point getLL (point k1,point k2,point k3,point k4){//两直线交点
db w1=cross(k1-k3,k4-k3),w2=cross(k4-k3,k2-k3);
return (k1*w2+k2*w1)/(w1+w2);
}
bool onS(point k1,point k2,point q){//q在[k1,k2]
return inmid(k1,k2,q)&&sign(cross(k1-q,k2-k1))==;
}
int t,n;
Line l[];
bool slove(point s,point t){
if(sign(s.dis(t)==))return false;
for(int i=;i<=n;i++){
if(sign(cross(s-l[i].p[],t-l[i].p[])*sign(cross(s-l[i].p[],t-l[i].p[])))>)
return false;
}
return true;
}
int main(){
scanf("%d",&t);
while (t--){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%lf%lf%lf%lf",&l[i].p[].x,&l[i].p[].y,&l[i].p[].x,&l[i].p[].y);
}
bool f=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(slove(l[i].p[],l[j].p[])){
f=;break;
}
else if(slove(l[i].p[],l[j].p[])){
f=;break;
}
else if(slove(l[i].p[],l[j].p[])){
f=;break;
}
else if(slove(l[i].p[],l[j].p[])){
f=;break; }
}if(f)break;
}
if(!f)
printf("No!\n");
else
printf("Yes!\n");
}
}
/**
1
3
0.0 0.0 0.0 1.0
0.0 2.0 0.0 3.0
1.0 1.0 2.0 1.0
*/
poj 3304的更多相关文章
- 判断线段和直线相交 POJ 3304
// 判断线段和直线相交 POJ 3304 // 思路: // 如果存在一条直线和所有线段相交,那么平移该直线一定可以经过线段上任意两个点,并且和所有线段相交. #include <cstdio ...
- POJ 3304 Segments 基础线段交判断
LINK 题意:询问是否存在直线,使得所有线段在其上的投影拥有公共点 思路:如果投影拥有公共区域,那么从投影的公共区域作垂线,显然能够与所有线段相交,那么题目转换为询问是否存在直线与所有线段相交.判断 ...
- POJ 3304 Segments(计算几何:直线与线段相交)
POJ 3304 Segments 大意:给你一些线段,找出一条直线可以穿过全部的线段,相交包含端点. 思路:遍历全部的端点,取两个点形成直线,推断直线是否与全部线段相交,假设存在这种直线,输出Yes ...
- POJ 3304 Segments 判断直线和线段相交
POJ 3304 Segments 题意:给定n(n<=100)条线段,问你是否存在这样的一条直线,使得所有线段投影下去后,至少都有一个交点. 思路:对于投影在所求直线上面的相交阴影,我们可以 ...
- POJ 3304 Segments (判断直线与线段相交)
题目链接:POJ 3304 Problem Description Given n segments in the two dimensional space, write a program, wh ...
- POJ 3304 Segments(判断直线与线段是否相交)
题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...
- poj 3304线段与直线相交
http://poj.org/problem?id=3304 Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: ...
- poj 3304 找一条直线穿过所有线段
题目链接:http://poj.org/problem?id=3304 #include<cstdio> #include<cstring> #include<cmath ...
- POJ 3304 Segments --枚举,几何
题意: 给n条线段,问有没有一条直线,是每条线段到这条直线上的投影有一个公共点. 解法: 有公共点说明有一条这条直线的垂线过所有线段,要找一条直线过所有线段,等价于从所有线段中任选两端点形成的直线存在 ...
- POJ 3304 Segments【叉积】
题意:有n条线段,问有没有一条直线使得所有线段在这条直线上的投影至少有一个共同点. 思路:逆向思维,很明显这个问题可以转化为是否有一条直线穿过所有线段,若有,问题要求的直线与该直线垂直,并且公共点为垂 ...
随机推荐
- seq_file学习(2)—— seq_file
li {list-style-type:decimal;}ol.wiz-list-level2 > li {list-style-type:lower-latin;}ol.wiz-list-le ...
- 5月25号开学! 第13期《python3自动化测试selenium+接口》课程,python零基础也能学
2019年 第13期<python3自动化测试selenium+接口>课程,5月25号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:5月25号-7月28号,每周 ...
- java新特性
第一章:java8新特性 1.1 lambda表达式 1.2 Stream API 1.3 java8新特性总结 第二章:java9新特性 2.1 mac下多版本jdk的安装和管理 第三章:java1 ...
- HRMS(人力资源管理系统)-从单机应用到SaaS应用-系统介绍
上周发布的<2018,全新出发(全力推动实现住有所居)>文章,其中记录了个人在这5年过程中的成长和收获,有幸认识了不少博客园的朋友,大家一起学习交流,在这个过程当中好多朋友提出SaaS系统 ...
- spring boot swagger-ui.html 404
很奇怪的问题,找了好久. 因为spring boot+swagger实现起来很简单.看下面三部曲: 1.pom添加两个swagger依赖. <!-- Swagger依赖包 --> < ...
- Spring中Mybatis的花样配置 及 原理
摘自: https://www.jianshu.com/p/fc23c94fc439
- Elasticsearch集群运维
一.索引管理 1. 创建索引 PUT test-2019-03 { "settings": { "index": { "number_of_shard ...
- 每天一个linux命令:find
1.命令简介 find(find) 命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子 ...
- python3 “POST data should be bytes or an iterable of bytes...”的解决方法
urllib.parse.urlencode({}).encode(encoding='utf8') 参考了:dushu990
- Kettle实现数据抽取、转换、装入和加载数据-数据转移ETL工具
原文地址:http://www.xue51.com/soft/5341.html Kettle是来自国外的一款开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,绿色无需 ...