HDU 3492 (直线与所有线段相交) Segment
题意:
给出n个线段,判断是否存在一条直线使得所有线段在直线上的射影的交非空。
分析:
如果我们找到一条与所有线段相交的直线,然后做一条与该直线垂直的直线,这些线段在直线上的射影就一定包含这个垂足。
所以我们只要判断是否存在一条直线与所有的点相交即可。
如果存在这样一条直线,那么将这条直线平移或者旋转,就会被这些线段中的某两个端点“卡”住。
所以我们枚举两个端点,然后判断这些线段是否与这两个点所在的直线都相交即可。
本以为是一道很简单的计算几何,结果卡了好几天。
看了别人的题解,才发现问题所在。
http://www.cppblog.com/acronix/archive/2010/08/17/123765.html
因为有可能存在重点,所以要判断,弄了个标志变量issame,如果所有的点都是同一个点那么也应该输出Yes
#include <cstdio>
#include <cmath> const int maxn = + ;
const double eps = 1e-;
struct Point
{
double x, y;
Point(double x=, double y=):x(x), y(y) {}
}p[maxn];
int dcmp(double x)
{
if(fabs(x) < eps) return ;
return x < ? - : ;
} Point operator - (const Point& a, const Point& b)
{ return Point(a.x-b.x, a.y-b.y); } double Cross(const Point& a, const Point& b)
{ return (a.x*b.y - a.y*b.x); } bool operator == (const Point& a, const Point& b)
{ return dcmp(a.x-b.x) == && dcmp(a.y-b.y) == ; } bool intersect(const Point& a, const Point& b, const Point& p1, const Point& p2)
{
int d1 = dcmp(Cross(b-a, p1-a));
int d2 = dcmp(Cross(b-a, p2-a));
if(d1 == || d2 == ) return true;
if(d1 * d2 < ) return true;
return false;
} int main(void)
{
//freopen("3492in.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T--)
{
int n;
scanf("%d", &n);
for(int i = ; i < *n-; i += )
scanf("%lf%lf%lf%lf", &p[i].x, &p[i].y, &p[i+].x, &p[i+].y); bool exist = false;
bool issame = true;
for(int i = ; i < *n- && !exist; ++i)
{
for(int j = i+; j < *n && !exist; ++j)
{
if(p[i] == p[j]) continue;
issame = false;
int k;
for(k = ; k < *n; k += )
if(!intersect(p[i], p[j], p[k], p[k+])) break;
if(k == * n)
exist = true;
}
} if(exist || issame) puts("Yes");
else puts("No");
} return ;
}
代码君
HDU 3492 (直线与所有线段相交) Segment的更多相关文章
- poj 3304 判断是否存在一条直线与所有线段相交
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8579 Accepted: 2608 Descript ...
- HDU 2150 Pipe( 判断线段相交水 )
链接:传送门 题意:略 思路:数据量很小,直接暴力所有线段 /********************************************************************* ...
- hdu 1558 (线段相交+并查集) Segment set
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题意是在坐标系中,当输入P(注意是大写,我当开始就wa成了小写)的时候输入一条线段的起点坐标和终点坐 ...
- hdu 3304(直线与线段相交)
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12042 Accepted: 3808 Descrip ...
- HDU 1558 Segment set( 判断线段相交 + 并查集 )
链接:传送门 题意:输入一个数 n 代表有 n 组操作,P 是在平面内加入一条线段,Q x 是查询第 x 条线段所在相交集合的线段个数 例如:下图 5 与 1.2 相交,1 与 3 相交,2 与 4 ...
- POJ 1039 Pipe(直线和线段相交判断,求交点)
Pipe Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8280 Accepted: 2483 Description ...
- hdu 1558 线段相交+并查集
题意:要求相交的线段都要塞进同一个集合里 sol:并查集+判断线段相交即可.n很小所以n^2就可以水过 #include <iostream> #include <cmath> ...
- 简单几何(直线与线段相交) POJ 1039 Pipe
题目传送门 题意:一根管道,有光源从入口发射,问光源最远到达的地方. 分析:黑书上的例题,解法是枚举任意的一个上顶点和一个下顶点(优化后),组成直线,如果直线与所有竖直线段有交点,则表示能穿过管道. ...
- POJ 3304 Segments (直线和线段相交判断)
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7739 Accepted: 2316 Descript ...
随机推荐
- Careercup - Google面试题 - 4716965625069568
2014-05-06 00:17 题目链接 原题: Given a -D matrix represents the room, obstacle and guard like the followi ...
- 手写SqlHelper
SqlHelper是一个基于.NET Framework的数据库操作组件.组件中包含数据库操作方法,SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterpr ...
- js异步加载 defer和async 比较
网上说法很多,很少一句话能总结清楚的,终于找到两句一针见血的描述,很到位: 相同点:都不阻塞DOM解析 defer :顺序:保证先后顺序.解析:HTML 解析器遇到它们时,不阻塞(脚本将被异步下载) ...
- [转载]Windows 7 IIS (HTTP Error 500.21 - Internal Server Error)解决
今天在测试网站的时候,在浏览器中输入http://localhost/时,发生如下错误: HTTP Error 500.21 - Internal Server Error Handler " ...
- SQLServer 触发器 同时插入多条记录有关问题
由于 SQL Server 的触发器, 没有 FOR EACH ROW (ORACL中有)的选项, 有时候不正确的使用 inserted 与deleted 可能会有点麻烦. 下面来一个简单的例子 -- ...
- winform窗口打开后文本框的默认焦点设置
原文:http://blog.csdn.net/kongwei521/article/details/6871411 winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种 ...
- 设置go语言语法高亮
1. 将$GOROOT/misc/vim/go.vim文件拷贝到-/.vim/syntax/目录下 2. 添加下面代码到~/.vimrc文件中 let mysyntaxfile = "XXX ...
- POJ 2528 Mayor's posters (线段树,染色问题,离散化要注意)
做这题建议看一下该题的discuss. #include <iostream> #include <stdio.h> #include <string.h> #in ...
- PHP图标类库 - JpGraph使用详解
http://w3note.com/web/181.html 微信平台开发的推广支持应用里,为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二 ...
- maven 命令备忘
1. 打包时 不执行测试 mvn package -Dmaven.test.skip=true