Segments---poj3304(判断直线与线段的位置关系)
题目链接:http://poj.org/problem?id=3304
题意:给你n个线段,求是否有一条直线与所有的线段都相交,有Yes,没有No;
枚举所有的顶点作为直线的两点,然后判断这条直线是否和所有的线段相交即可;注意不能找两个相同的点作为直线上的两点;
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<stdio.h>
#include<queue>
using namespace std;
#define met(a, b) memset(a, b, sizeof(a))
#define mod 1000000007
typedef long long LL;
const int N = ;
const int INF = 0x3f3f3f3f;
const double eps = 1e-; struct point
{
double x, y;
point(double x=, double y=) : x(x), y(y) {}
friend point operator -(point p1, point p2)
{
return point(p1.x-p2.x, p1.y-p2.y);
}
friend int operator ^(point p1, point p2)
{
double k = p1.x*p2.y - p1.y*p2.x; if(k > eps) return ;
if(fabs(k) < eps) return ;
return -;
}
friend int operator ==(point p1, point p2)
{
return (p1.x == p2.x && p1.y == p2.y);
}
}p[N]; struct line
{
point s, e;
line(point s=, point e=) : s(s), e(e) {}
}Line[N]; int Judge(line l, line L[], int n)
{
for(int i=; i<=n; i++)
{
int k = abs( ((l.s-l.e)^(L[i].s-l.e)) + ((l.s-l.e)^(L[i].e-l.e)) );
///判断直线l是否与线段L[i]相交;
if(k == ) return ;///不相交;
}
return ;
} int main()
{
int T, n;
scanf("%d", &T);
while(T--)
{
met(p, );
met(Line, ); int k = ;
scanf("%d", &n);
for(int i=; i<=n; i++)
{
double x1, x2, y1, y2;
scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
p[k++] = point(x1, y1);
p[k++] = point(x2, y2);
Line[i] = line(p[k-], p[k-]);
}
int flag = ;
for(int i=; i<k && !flag; i++)
{
for(int j=; j<i && !flag; j++)
{
if(p[i] == p[j]) continue;
flag = Judge(line(p[i], p[j]), Line, n);
}
}
if(flag) puts("Yes!");
else puts("No!");
}
return ;
}
Segments---poj3304(判断直线与线段的位置关系)的更多相关文章
- POJ 3304 Segments(判断直线与线段是否相交)
题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...
- POJ_2318_TOYS&&POJ_2398_Toy Storage_二分+判断直线和点的位置关系
POJ_2318_TOYS&&POJ_2398_Toy Storage_二分+判断直线和点的位置 Description Calculate the number of toys th ...
- poj 3304 Segments(计算直线与线段之间的关系)
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10921 Accepted: 3422 Descrip ...
- Segments--poj3304(判断直线与线段之间的关系)
http://poj.org/problem?id=3304 给你几条线段 然后 让你找到一条直线让他在这条直线上的映射有一个重合点 如果有这条直线的话 这个重合的部分的两个端点一定是某两条线段的 ...
- 判断直线与线段相交 POJ 3304 Segments
题意:在二维平面中,给定一些线段,然后判断在某直线上的投影是否有公共点. 转化,既然是投影,那么就是求是否存在一条直线L和所有的线段都相交. 证明: 下面给出具体的分析:先考虑一个特殊的情况,即n=1 ...
- 叉积_判断点与三角形的位置关系 P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- 几何+点与线段的位置关系+二分(POJ2318)
TOYS Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10666 Accepted: 5128 Description ...
- POJ 3304 Segments 判断直线和线段相交
POJ 3304 Segments 题意:给定n(n<=100)条线段,问你是否存在这样的一条直线,使得所有线段投影下去后,至少都有一个交点. 思路:对于投影在所求直线上面的相交阴影,我们可以 ...
- poj3304(叉积判断直线和线段相交)
题目链接:https://vjudge.net/problem/POJ-3304 题意:求是否能找到一条直线,使得n条线段在该直线的投影有公共点. 思路: 如果存在这样的直线,那么在公共投影点作直线的 ...
随机推荐
- BZOJ4297 : [PA2015]Rozstaw szyn
每个点的最优取值范围是一个区间,将叶子一层层剥去,得到一棵有根树,父亲的取值范围由儿子推得,时间复杂度$O(n\log n)$. #include<cstdio> #include< ...
- BZOJ4155 : [Ipsc2015]Humble Captains
第一问最小割,第二问: 设du[i]表示i点的度数,则要最小化$\frac{|1集合的du[i]之和-2集合的du[i]之和|}{2}$, 压位01背包即可. #include<cstdio&g ...
- JavaScript 变量、函数与原型链
定义 || 赋值 1-函数的定义 函数定义的两种方式: “定义式”函数:function fn(){ alert("哟,哟!"); } “赋值式”函数:var fn = funct ...
- PNG无损压缩工具Optipng【备忘】
Optipng 是专门的 PNG 图像优化工具. 支持WINODWS.LINUX 地址:http://optipng.sourceforge.net/ 另:jpegoptim 优化 jpeg 图片 地 ...
- Codeforces Round #206 (Div. 2) A. Vasya and Digital Root
#include <iostream> using namespace std; int main(){ int k,d; cin >> k >>d; ) { k ...
- lightning mdb 源代码分析(1)
lighting mdb(lmdb) 是一个高性能mmap kv数据库,基本介绍和文档参见symas官网,本文将尝试分析其源代码结构以理解数据库设计的关键技术. 本系列文章将尝试从以下几个方面进行分析 ...
- Brief introduction to Scala and Breeze for statistical computing
Brief introduction to Scala and Breeze for statistical computing 时间 2013-12-31 03:17:19 Darren Wilk ...
- 关于 swift 的图片多选问题
http://stackoverflow.com/questions/20756899/how-to-select-multiple-images-from-uiimagepickercontroll ...
- vi用法
- 《GK101任意波发生器》升级固件发布(版本:1.0.2build627)
一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build672 编译日期:2014-12-29 ====================================== 二. ...