poj 3304 Segments (题意理解出错,错误的只枚举了过线段的直线)
//枚举过每一条线段的直线,
//再判断其他线段的点在直线上或被直线穿过
//即求直线与线段相交(叉积)
#include<stdio.h>
#include<math.h>
#define esp 1e-8
struct Node
{
double x,y;
} a[],b[],c[],tmp1,tmp2;
double cal(Node a,Node b,Node c)//ca*cb
{
return ((a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y));
}
double diji(Node a,Node b,Node c)//ab·ac
{
return (b.x-a.x)*(c.x-a.x)+(b.y-a.y)*(c.y-a.y);
}
int main()
{
int _case,i,j,k,n;
scanf("%d",&_case);
while(_case--)
{
scanf("%d",&n);
for(i=; i<n; i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
c[*i]=a[i];
scanf("%lf%lf",&b[i].x,&b[i].y);
c[*i+]=b[i];
}
for(i=; i<*n; i++)
{
tmp1=c[i];
for(k=i+; k<*n; k++)
{
tmp2=c[k];
if(fabs(tmp1.x-tmp2.x)<esp&&fabs(tmp1.y-tmp2.y)<esp)continue;//判断重点
//printf("%d#\n",i);
for(j=; j<n; j++)
{
double k=cal(a[j],tmp2,tmp1)*cal(b[j],tmp2,tmp1); if(k>esp)break;
}
if(j==n)break;
}
if(j==n)break;
}
if(j!=n)printf("No!\n");
else printf("Yes!\n");
}
return ;
}
poj 3304 Segments (题意理解出错,错误的只枚举了过线段的直线)的更多相关文章
- POJ 3304 Segments 判断直线和线段相交
POJ 3304 Segments 题意:给定n(n<=100)条线段,问你是否存在这样的一条直线,使得所有线段投影下去后,至少都有一个交点. 思路:对于投影在所求直线上面的相交阴影,我们可以 ...
- POJ 3304 Segments(计算几何:直线与线段相交)
POJ 3304 Segments 大意:给你一些线段,找出一条直线可以穿过全部的线段,相交包含端点. 思路:遍历全部的端点,取两个点形成直线,推断直线是否与全部线段相交,假设存在这种直线,输出Yes ...
- POJ 3304 Segments(判断直线与线段是否相交)
题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...
- POJ 3304 Segments (判断直线与线段相交)
题目链接:POJ 3304 Problem Description Given n segments in the two dimensional space, write a program, wh ...
- POJ 3304 Segments 基础线段交判断
LINK 题意:询问是否存在直线,使得所有线段在其上的投影拥有公共点 思路:如果投影拥有公共区域,那么从投影的公共区域作垂线,显然能够与所有线段相交,那么题目转换为询问是否存在直线与所有线段相交.判断 ...
- poj 3304 Segments
Segments 题意:给你100以内的n条线段,问你是否存在一条直线,使得题给的线段在这条直线上的“投影” 相交于一点: 思路: 1.先要将线段投影相交于一点转变为存在一条直线与所有的线段相交: 很 ...
- POJ 3304 Segments --枚举,几何
题意: 给n条线段,问有没有一条直线,是每条线段到这条直线上的投影有一个公共点. 解法: 有公共点说明有一条这条直线的垂线过所有线段,要找一条直线过所有线段,等价于从所有线段中任选两端点形成的直线存在 ...
- POJ 3304 Segments【叉积】
题意:有n条线段,问有没有一条直线使得所有线段在这条直线上的投影至少有一个共同点. 思路:逆向思维,很明显这个问题可以转化为是否有一条直线穿过所有线段,若有,问题要求的直线与该直线垂直,并且公共点为垂 ...
- 简单几何(线段与直线的位置) POJ 3304 Segments
题目传送门 题意:有若干线段,问是否存在一条直线,所有线段投影到直线上时至少有一个公共点 分析:有一个很好的解题报告:二维平面上线段与直线位置关系的判定.首先原问题可以转换为是否存在一条直线与所有线段 ...
随机推荐
- UVALive7261(2015ACM/ICPC北京赛区现场赛A)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- (转)Inno Setup入门(三)——指定压缩方式
本文转载自:http://blog.csdn.net/augusdi/article/details/8564796 Setup段中的compression指定了采用的压缩方式,较高的压缩率需要较多的 ...
- 杂项:大数据 (巨量数据集合(IT行业术语))
ylbtech-杂项:大数据 (巨量数据集合(IT行业术语)) 大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞 ...
- 重载(overload),覆盖(override),隐藏(hide)的区别
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide).在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的, ...
- Oracle定时值执行存储过程
declare jobno number; begin dbms_job.submit( jobno, 'p_dosomething;', --what ...
- [Python] Request module
http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
- MyBatis Generator模板
注:注意替换红色部分 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generator ...
- 利用Linux系统生成随机密码的9种方法
Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法. 1. 使用SHA算法来加密日期,并输出结 ...
- 关于where和having的直观理解
一,查询区别 where是对前面select的字段没有要求,直接查询库表的 having是对前面的select的字段有要求,字段已经select出来的 可以用having进行处理 select id, ...
- mongodb(四)
Count+Distinct+Group数据库命令操作固定集合特性GridFS文件系统补充服务器端脚本 db.runCommand({group:{ ns:"persons", k ...