POJ 3304 /// 判断线段与直线是否相交
题目大意:
询问给定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 /// 判断线段与直线是否相交的更多相关文章
- poj 3304 Segments 线段与直线相交
Segments Time Limit: 1000MS Memory Limit: 65536K Description Given n segments in the two dim ...
- C - Segments POJ - 3304 (判断线段相交)
题目链接:https://vjudge.net/contest/276358#problem/C 题目大意:给你n条线段,问你是否存在一条线段使得所有的线段在这条直线的投影至少具有一个交点? 具体思路 ...
- POJ 3304 segments 线段和直线相交
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14178 Accepted: 4521 Descrip ...
- 判断线段和直线相交 POJ 3304
// 判断线段和直线相交 POJ 3304 // 思路: // 如果存在一条直线和所有线段相交,那么平移该直线一定可以经过线段上任意两个点,并且和所有线段相交. #include <cstdio ...
- poj1410(判断线段和矩形是否相交)
题目链接:https://vjudge.net/problem/POJ-1410 题意:判断线段和矩形是否相交. 思路:注意这里的相交包括线段在矩形内,因此先判断线段与矩形的边是否相交,再判断线段的两 ...
- POJ 1127 /// 判断线段与线段是否相交
题目大意: 给定n条线段 接下来n行是端点信息 接下来询问 a b 是否相交 若a与c相交 b与c相交 ,那么a与b就是相交的 先判断任两条线段是否相交 再用folyd #include <cs ...
- 【BZOJ 1033】 [ZJOI2008]杀蚂蚁antbuster(判断线段是否和圆相交)
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1033 [题意] https://www.zybuluo.com/Jerusalem/n ...
- Segments - POJ 3304 (判断直线与线段是否相交)
题目大意:给出一些线段,然后判断这些线段的投影是否有可能存在一个公共点. 分析:如果这些线段的投影存在一个公共点,那么过这个公共点作垂线一定与所有的直线都想交,于是题目转化成是否存在一个直线可以经 ...
- poj 3304 判断是否存在一条直线与所有线段相交
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8579 Accepted: 2608 Descript ...
随机推荐
- MySQL主键跟外键
定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄. 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证 ...
- css内容超出显示省略号
CSS实现单行.溢出显示省略号(…) 把要设置的显示省略号的标签,加上以下的属性 overflow: hidden; /*超出不显示*/ text-overflow: ellipsis;/* 超出内容 ...
- luoguP3799 妖梦拼木棒 [组合数学]
题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入输出格式 输入格式: 第一行一个整数n 第二行n个整数 ...
- Codeforces703D-Mishka and Interesting sum-离线树状数组
(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:传送门 原题目描述在最下面. 询问一个区间内出现次数为偶数次的数字的异或和. 思路: 先求出区间异或前缀和,其实就是出现次 ...
- P1831 杠杆数
P1831 杠杆数 题目描述 如果把一个数的某一位当成支点,且左边的数字到这个点的力矩和等于右边的数字到这个点的力矩和,那么这个数就可以被叫成杠杆数. 比如4139就是杠杆数,把3当成支点,我们有这样 ...
- D语言简介
D语言,一种通用计算机程序语言,威力强大.功能丰富,支持多种编程范式,例如面向对象.[1] D语言最初由Digital Mars公司就职的Walter Bright于2001年发布,意图改进C++语 ...
- 牛客练习赛43B Tachibana Kanade Loves Probability
题目链接:https://ac.nowcoder.com/acm/contest/548/C 题目大意 略 分析 利用快速幂先移到 k1 位,然后开始一个一个取余数. 代码如下 #include &l ...
- 2D转换中的translate里调用matrix()的用法
一开始,经常看到大佬们用matrix的方法,当时完全不会,不知道如何写.到后面,发现都是这样用,导致只能去认真看一下这个东西怎么用,要不然完全跟不上的节奏啊.因此建议大家去看下这篇文章,写的挺不错的, ...
- boost库之pool编译错误
1,编译错误截图 2,解决方法 这是由于没有链接对应的库导致的错误,在编译命令中加上 -lboost_system选项即可.
- spark-sql createOrReplaceTempView 和createGlobalTempView区别
在讲解 createOrReplaceTempView 和createGlobalTempView的区别前,先了解下Spark Application 和 Spark Session区别 Spark ...