博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ3304:Segments——题解
阅读量:6451 次
发布时间:2019-06-23

本文共 1093 字,大约阅读时间需要 3 分钟。

题目大意:给n条线段,求是否存在一条直线,将所有线段投影到上面,使得所有投影至少交于一点。

————————————————————————————

首先考虑当情况可能时,过相交点做垂线,则垂线一定与所有线相交。

所以就变成了求是否存在一条直线,使得直线和所有直线都相交的问题了。

显然如果存在这样的线,那么至少有一种情况,这样的线的两个端点是其中两条直线的任意两个端点。

那么枚举两个端点判断即可。

如何判断两直线相交。

#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef double dl;const dl eps=1e-8;const int N=101;struct point{ //既是向量又是点 dl x; dl y;}p[2*N];int n;inline point getmag(point a,point b){ point s; s.x=b.x-a.x;s.y=b.y-a.y; return s;}inline dl multiX(point a,point b){ return a.x*b.y-b.x*a.y;}bool check(point a,point b){ if(fabs(a.x-b.x)
eps)return 0; } return 1;}int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&p[i+n].x,&p[i+n].y); } bool flag=0; for(int i=1;i<=2*n&&!flag;i++){ for(int j=i+1;j<=2*n&&!flag;j++){ if(check(p[i],p[j]))flag=1; } } if(flag)puts("Yes!"); else puts("No!"); } return 0;}

 

转载于:https://www.cnblogs.com/luyouqi233/p/8057652.html

你可能感兴趣的文章
FastDFS分布式文件系统nginx模块安装和部署
查看>>
关于JVM CPU资源占用过高的问题排查
查看>>
Hibernate通过SQL查询常量时只能返回第一个字符的解决方法
查看>>
史上最全的maven pom.xml文件教程详解
查看>>
使用Xmanager连接CentOS 7远程桌面
查看>>
java web中使 Browser 不缓存页面的过滤器(Filter - 2)
查看>>
D3在ID中selection.html()获取不到数据
查看>>
Ubuntu 下使用apt-get安装最新版本的MySQL
查看>>
ORACLE数据库日常维护
查看>>
zookeeper分布式锁的原理
查看>>
Highcharts Example
查看>>
TCP/IP详解学习笔记(二)--链路层笔记
查看>>
Maven 标准目录结构
查看>>
(转载)Hive学习笔记--Hive 高级编程
查看>>
创建树上每级节点与叶子节点的映射[PHP]
查看>>
借助Handler,实现ViewPager中页面的自动切换
查看>>
Java 8 中的 Streams API 详解
查看>>
python 元数据和inspect
查看>>
五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
查看>>
uva 548 - Tree
查看>>