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条线段,问有没有一条直线使得所有线段在这条直线上的投影至少有一个共同点. 思路:逆向思维,很明显这个问题可以转化为是否有一条直线穿过所有线段,若有,问题要求的直线与该直线垂直,并且公共点为垂 ...
随机推荐
- 透明Panel
unit TransparentPanel; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Varia ...
- 比较两个list对象是否相同
public Boolean exist(Container container){ List<SensorAtom> newSensorList = container.getSenso ...
- 搜索历史命令 Ctrl + R ( ctrl + r to search the history command )
Linux下的神器 ctrl + r (reverse-i-search ) 的使用方法: (reverse-i-search usage: ) (press ctl + r ) 输入任意字符,例 ...
- 【Tomcat】Tomcat报错追踪
应用部署上之后无法正常启动.tomcat启动日志例如以下: 信息: Starting service Catalina 2015-7-22 18:39:31 org.apache.catalina.c ...
- py3下怎么用StringIO
try: from StringIO import StringIO except ImportError: from io import StringIO
- 【PHP】解析PHP中的变量
php是一门脚本语言,同时php中的变量类型也是弱语言类型,这和javascript非常相似.笔者在这里说一说PHP中的变量知识点. 1. 引用类型变量 看下面的案例: <?php class ...
- SNF软件开发机器人2018最新更新内容
SNF软件开发机器人从10月份到现在的更新升级情况如下: 1 表单 表单控件占多列时,宽度默认0,自适应宽度2 excel导出 部分excel导出方法移动到框架中,可通用获取3 生成代码 生成的代码, ...
- 【原创 Hadoop&Spark 动手实践 3】Hadoop2.7.3 MapReduce理论与动手实践
开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- virtualbox安装android6.0并设置分辨率为1920x1080x32
下载安装:https://www.cnblogs.com/wynn0123/p/6288344.html 这里我做的是下载android6.0-64bit,然后文件系统只支持ext4 安装完成之后我的 ...
- 理解REST和RPC
REST 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 网站开发,完全可以采用软件开发的模式.但是传统上,软件和网络是两个不同的领域,很少有交集:软件开发主要针对单机环境,网络则主要研究 ...