题目大意:

询问给定n条线段 是否存在一条直线使得所有线段在直线上的投影存在公共点

这个问题可以转化为 是否存在一条直线与所有的线段同时相交

而枚举直线的问题

因为若存在符合要求的直线 那么必存在穿过某线段的端点的直线是符合要求的直线

那么只要枚举两个端点连成一线

#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
const double eps=1e-;
double add(double a,double b) {
if(abs(a+b)<eps*(abs(a)+abs(b))) return ;
return a+b;
} // 考虑误差
struct P {
double x,y;
P(){};
P(double _x,double _y):x(_x),y(_y){}
P operator - (P p) {
return P(add(x,-p.x),add(y,-p.y)); }
P operator + (P p) {
return P(add(x,p.x),add(y,p.y)); }
P operator * (double d) {
return P(x*d,y*d); }
double dot(P p) { // 点积
return add(x*p.x,y*p.y); }
double det(P p) { // 叉积
return add(x*p.y,-y*p.x); }
}p[],q[];
int n;
/* 计算ab两点的距离
设点a(x1,y1) b(x2,y2)
则dis=sqrt((x1-x2)^2+(y1-y2)^2)
设 c=a-b=(x1-x2,y1-y2)
那么 c的点积恰好等于距离的平方
*/
double dis(P a,P b) {
return sqrt((a-b).dot(a-b));
}
/*判断线段S与直线L是否相交
(l1-s1)与(l2-s1)的叉积可以判断两向量的相对位置
叉积>0说明前者在后者的顺时针方向(s1在l1l2的右边)
叉积<0说明前者在后者的逆时针方向(s1在l1l2的左边)
那么两个端点对应的叉积相乘小于0
就说明两个端点在直线的不同侧
即线段与直线相交
*/
bool insSL(P s1,P s2,P l1,P l2) {
return (l1-s1).det(l2-s1)*
(l1-s2).det(l2-s2) <=;
}
bool check(P a,P b)
{
if(dis(a,b)==) return ; // 同一点
for(int i=;i<n;i++)
if(insSL(p[i],q[i],a,b)==) return ; // 存在不相交
return ; // 与所有线段都相交
}
void solve()
{
bool flag=;
for(int i=;i<n;i++) {
for(int j=;j<n;j++) {
if(check(p[i],p[j]) || check(p[i],q[j])
|| check(q[i],p[j]) || check(q[i],q[j]))
{ flag=; break; }
}
if(flag) break;
}
if(flag) printf("Yes!\n");
else printf("No!\n");
}
int main()
{
int t; scanf("%d",&t);
while(t--) {
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&q[i].x,&q[i].y);
solve();
}
}

POJ 3304 /// 判断线段与直线是否相交的更多相关文章

  1. poj 3304 Segments 线段与直线相交

    Segments Time Limit: 1000MS   Memory Limit: 65536K       Description Given n segments in the two dim ...

  2. C - Segments POJ - 3304 (判断线段相交)

    题目链接:https://vjudge.net/contest/276358#problem/C 题目大意:给你n条线段,问你是否存在一条线段使得所有的线段在这条直线的投影至少具有一个交点? 具体思路 ...

  3. POJ 3304 segments 线段和直线相交

    Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14178   Accepted: 4521 Descrip ...

  4. 判断线段和直线相交 POJ 3304

    // 判断线段和直线相交 POJ 3304 // 思路: // 如果存在一条直线和所有线段相交,那么平移该直线一定可以经过线段上任意两个点,并且和所有线段相交. #include <cstdio ...

  5. poj1410(判断线段和矩形是否相交)

    题目链接:https://vjudge.net/problem/POJ-1410 题意:判断线段和矩形是否相交. 思路:注意这里的相交包括线段在矩形内,因此先判断线段与矩形的边是否相交,再判断线段的两 ...

  6. POJ 1127 /// 判断线段与线段是否相交

    题目大意: 给定n条线段 接下来n行是端点信息 接下来询问 a b 是否相交 若a与c相交 b与c相交 ,那么a与b就是相交的 先判断任两条线段是否相交 再用folyd #include <cs ...

  7. 【BZOJ 1033】 [ZJOI2008]杀蚂蚁antbuster(判断线段是否和圆相交)

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1033 [题意] https://www.zybuluo.com/Jerusalem/n ...

  8. Segments - POJ 3304 (判断直线与线段是否相交)

    题目大意:给出一些线段,然后判断这些线段的投影是否有可能存在一个公共点.   分析:如果这些线段的投影存在一个公共点,那么过这个公共点作垂线一定与所有的直线都想交,于是题目转化成是否存在一个直线可以经 ...

  9. poj 3304 判断是否存在一条直线与所有线段相交

    Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8579   Accepted: 2608 Descript ...

随机推荐

  1. JS分支结构与循环结构

    1.分支结构 ①if语句 语法结构 if (/* 条件表达式 */) { // 执行语句 } ​ if (/* 条件表达式 */){ // 成立执行语句 } else { // 否则执行语句 } ​ ...

  2. php面向对象深入理解(一)

    面向对象(Object Oriented Programming,OOP)的基础知识: 第一个例子:   类Test.class.php <?php class Test{ public $a= ...

  3. FontFamily 和Font 的区别

    GDI+ 将字样相同但字形不同的字体分组为字体系列.例如,下面是同一个字样(Arial),不同的字形 : ----------------------------------------------- ...

  4. git学习记录1(本地库管理)

    学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...

  5. 2019 牛客多校第一场 E ABBA

    题目链接:https://ac.nowcoder.com/acm/contest/881/E 题目大意 问有多少个由 (n + m) 个 ‘A’ 和 (n + m) 个 ‘B’,组成的字符串能被分割成 ...

  6. 什么是PoE、PSE、PD设备?

    一个完整的PoE系统包括供电端设备(PSE, Power Sourcing Equipment)和受电端设备(PD, Power Device)两部分.PSE设备是为以太网客户端设备供电的设备,同时也 ...

  7. sklearn 调用逻辑回归函数训练数据时出现 “unknown label type:unknown”

    problemsolution:

  8. 图文形式分享网页到facebook (要求:可以多个图片切换选择)

    分享网页到facebook的功能很常见,之前都是简单的网页分享,没遇到什么砍儿.这次的需求相比之前有一丁点特殊,就是图片得是用户指定选择的. fb文档地址:https://developers.fac ...

  9. 论文阅读笔记---ShuffleNet V1

    01 ShuffleNet V1要解决什么问题 为算力有限的嵌入式场景下专门设计一个高效的神经网络架构. 02 亮点 使用了两个新的操作:pointwise group convolution和cha ...

  10. eclipse新建maven项目和聚合项目

    1.new maven project :  next 2.勾选 create a simple project  :  next 3.Group Id:项目的包路径 如com.jiayou.zjl, ...