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 ...
随机推荐
- Zookeeper_CAP原则
CAP原则 简单介绍CAP 想要进行分布式事务控制,CAP理论是我们必须要知道的: CAP原则:也叫CAP定理,指的是在一个分布式系统中,一致性.可用性.分区容错性三者不可兼得 一致性(Consist ...
- thinkphp 查询缓存
对于及时性要求不高的数据查询,我们可以使用查询缓存功能来提高性能,而且无需自己使用缓存方法进行缓存和获取. 大理石平台价格 查询缓存功能支持所有的数据库,并且支持所有的缓存方式和有效期. 在使用查询缓 ...
- 大数据学习路线,来qun里分享干货,
一.Linux lucene: 全文检索引擎的架构 solr: 基于lucene的全文搜索服务器,实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面. 推荐一个大数据学习群 ...
- 01二维背包——poj2576
/* 要求把a数组分成两个集合,两个集合人数最多差1,并且元素之和的差尽可能小 那只要把所有可行的列出来即可 01二维背包,即体积是个二维数据,那么我们的背包状态也应该设为二维 dp[j][k]设为 ...
- Oozie框架介绍
Oozie框架: 1.Oozie英文翻译:驯象人 2.Oozie简介 一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce.Pig Jobs的 ...
- ShellExecute打开文件打开文件夹的用法
1 #include <uf.h> 2 #include <uf_part.h> 3 #include <atlstr.h> 4 #include <iost ...
- map和unordered_map使用小结
map和unordered_map unordered_map简介: #include <cstdio> #include <iostream> #include <un ...
- Java 并发总结(三)
锁优化及注意事项 有助于提高锁的性能 减小所持有时间:例如不要对方法直接加锁,而是在方法中对具体访问临界资源的代码加锁 减小锁粒度:如ConcurrentHashMap 用读写锁代替独占锁 锁分离:如 ...
- jquery中typeof的用法
typeof 可以用来检测给定变量的数据类型,可能的返回值: 'undefined' 'boolean' 'string' 'number' 'object' 'function' var hahah ...
- POJ2406-Power Strings-KMP循环节/哈希循环节
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...