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条线段在该直线的投影有公共点. 思路: 如果存在这样的直线,那么在公共投影点作直线的 ...
随机推荐
- Interleaving String leetcode java
题目: Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given ...
- 【BZOJ】3669: [Noi2014]魔法森林(lct+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=3669 首先看到题目应该可以得到我们要最小化 min{ max{a(u, v)} + max{b(u, ...
- 最大权闭合图 && 【BZOJ】1497: [NOI2006]最大获利
http://www.lydsy.com/JudgeOnline/problem.php?id=1497 最大权闭合图详细请看胡伯涛论文<最小割模型在信息学竞赛中的应用>,我在这里截图它的 ...
- Json 数组拼接
var str1 = {"name": "apple", "sex": "21"}; / ...
- ECMAScript继承
继承的定义 ECMAScript 实现继承可以从父类入手,所有开发者定义的类都可作为父类,出于安全考虑,本地类和宿主类不能作为父类,因为容易收到恶意攻击 创建只是用于给子类提供通用函数的父类被看作抽象 ...
- JS中检测数据类型的四种方式及每个方式的优缺点
//1.typeof 用来检测数据类型的运算符 //->typeof value //->返回值首先是一个字符串,其次里面包含了对应的数据类型,例如:"number". ...
- 模板引擎freemarker的简单使用教程
freemarker十分强大,而且不依赖web容器,个人感觉十分好用. 下面直接进主题,freemarker还有什么特性,请找度娘或谷哥~ 一.freemarker生成word 1.创建模板. 我创建 ...
- jquery判断是否出现滚动条
$(document).ready(function(){ var winH = $(window).height(); //页面可视区域高度 $(window).scroll(function () ...
- Java接口、Java抽象类、C++抽象类的区别
由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...
- 【应用笔记】【AN002】通过iTool2基于MinGW平台读写EEPROM
为了增加大家 DIY 的乐趣,XiaomaGee今天为大家只做了一篇使用iTool2内置的USB转I2C来读写EEPROM的方法和代码. iTool2简介 iTool2为银杏公司面向电子类研发工程师推 ...