Segments POJ 3304 直线与线段是否相交

题目大意:给出n条线段,问是否存在一条直线,使得n条线段在直线上的投影有至少一个公共点。

题目思路:如果假设成立,那么作该直线的垂线l,该垂线l与所有线段相交,且交点可为线段中的某两个交点

证明:若有l和所有线段相交,则可保持l和所有线段相交,左右平移l到和某一线段交于端点停止(“移不动了”)。然后绕这个交点旋转。也是转到“转不动了”(和另一线段交于其一个端点)为止。这样就找到了一个新的l满足题意,而且经过其中两线段的端点。

如何判断直线是否与线段相交如果线段的两个端点在直线的两侧,那么线段与直线相交,因此可利用叉积来经行判断。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<math.h>
#include<map>
#define INF 0x3f3f3f3f
#define MAX 100005
#define Temp 1000000000
#define MOD 1000000007using namespace std;int n;struct node
{double x1,y1,x2,y2;
}a[MAX];int check(int pos,double x1,double y1,double x2,double y2)//求叉积
{double x3=a[pos].x1,y3=a[pos].y1,x4=a[pos].x2,y4=a[pos].y2;if(fabs(x1-x2)<1e-8 && fabs(y1-y2)<1e-8)return 0;double op1=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1);double op2=(x2-x1)*(y4-y1)-(x4-x1)*(y2-y1);if(op1*op2 > (1e-8))return 0;return 1;
}int Find(double x1,double y1,double x2,double y2)
{for(int i=0;i<n;i++){if(!check(i,x1,y1,x2,y2))return 0;}return 1;
}int solve()
{for(int i=0;i<n;i++)//枚举端点
    {for(int j=i+1;j<n;j++){if(Find(a[i].x1,a[i].y1,a[i].x2,a[i].y2))//上方线段return 1;if(Find(a[i].x1,a[i].y1,a[j].x1,a[j].y1))//两条线段左端连线return 1;if(Find(a[i].x1,a[i].y1,a[j].x2,a[j].y2))//两条线段左上右下连线return 1;if(Find(a[i].x2,a[i].y2,a[j].x1,a[j].y1))//两条线段右上左下连线return 1;if(Find(a[j].x1,a[j].y1,a[j].x2,a[j].y2))//下方线段return 1;if(Find(a[i].x2,a[i].y2,a[j].x2,a[j].y2))//两条线段有段连线return 1;}}return 0;
}int main()
{int T;scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=0;i<n;i++){scanf("%lf%lf%lf%lf",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);}if(n<3)//如果有一个或两个线段特判一下
        {printf("Yes!\n");continue;}int ok=solve();if(ok)printf("Yes!\n");elseprintf("No!\n");}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/alan-W/p/5978520.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Socket编程(不限Linux)

“一切皆Socket&#xff01;” 话虽些许夸张&#xff0c;但是事实也是&#xff0c;现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。 我们深谙信息交流的价值&#xff0c;那网络中进程之间如何通信&#xff0c;如我们每天打开浏览器浏览网页时&#xff…

shell之计算文本中单词出现频率

2019独角兽企业重金招聘Python工程师标准>>> Word Frequency&#xff08;https://leetcode.com/problems/word-frequency/description/&#xff09; Example: Assume that words.txt has the following content: the day is sunny the the the sunny is is Your scr…

一个halcon拟合直线的例子

read_image (hImage, E:/vs2012/halcon卡尺例程/白光碗光效果4.bmp) get_image_pointer1(hImage, Pointer, Type, Width, Height) *功能&#xff1a;获取一个通道的指针&#xff0c;得到HTuple Pointer, Type, CurWidth, CurHeight dev_set_draw(margin) dev_set_color (green…

NLP数据挖掘基础知识

Basis(基础)&#xff1a; SSE(Sum of Squared Error, 平方误差和)SAE(Sum of Absolute Error, 绝对误差和)SRE(Sum of Relative Error, 相对误差和)MSE(Mean Squared Error, 均方误差)RMSE(Root Mean Squared Error, 均方根误差)RRSE(Root Relative Squared Error, 相对平方根误…

SQL Fundamentals || Oracle SQL语言

对于SQL语言&#xff0c;有两个组成部分&#xff1a; DML&#xff08;data manipulation language&#xff09; 它们是SELECT、UPDATE、INSERT、DELETE&#xff0c;就象它的名字一样&#xff0c;这4条命令是用来对数据库里的数据进行操作的语言。 DDL&#xff08;data defini…

圆形卡尺测量后创建模板

read_image (Image, QQ图片20201113111404.jpg) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image) rgb1_to_gray (Image,Image) ****创建模板阶段 *大致找内圆 fast_threshold (Image, Region, 128, 255, 20) connecti…

fread函数和fwrite函数,read,write

fread函数和fwrite函数 1.函数功能 用来读写一个数据块。 2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 3.说明 &#xff08;1&#xff09;buffer&#xff1a;是一个指针&#xff0c;对fread来说&#xff0c;它是读入数据的存放地址。对fwrit…

微信小程序 CSS filter(滤镜)的使用示例

前言 之前在看七月老师的视频的时候&#xff0c;看到了有一个样式是-webkit-filter&#xff0c;不知道是什么&#xff08;我没咋学过CSS&#xff0c;嘿嘿&#xff0c;所以不知道是啥&#xff09;&#xff0c;于是查了一下&#xff0c;原来是滤镜吖。但是在微信小程序里使用的时…

vmware ubuntu重置root密码

1.重启ubuntu&#xff0c;按住shift&#xff08;开机启动时&#xff09; 2.选择recovery mode,enter 3.root选择root drop to root shell prompt 4.进入shell界面设置密码 (1)mount -rw -o remount / (2)passwd username(设置root用户的密码) 完成以上修改后&#xff0c;重启就…

halcon使用直线标定板,标定相机内参代码

read_image (Image, 直线标定板图片/Left201118140641772.bmp) get_image_size (Image, Width, Height) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image) * Image Acquisition 01: Code generated by Image Acquisiti…

dyld: Library not loaded: @rpath/libswiftCore.dylib 解决方法

解决&#xff1a; 设置Build Setting - > 搜索 embe关键字 -> 修改属性 见如下图&#xff1a; 如果更新了Xcode 8 这里变成&#xff1a; 转载于:https://www.cnblogs.com/yajunLi/p/5979621.html

Bootloader及u-boot简介/u-boot系统启动流程

Bootloader及u-boot简介Bootloader代码是芯片复位后进入操作系统之前执行的一段代码&#xff0c;主要用于完成由硬件启动到操作系统启动的过渡&#xff0c;从而为操作系统提供基本的运行环境&#xff0c;如初始化CPU、堆栈、存储器系统等。Bootloader 代码与CPU 芯片的内核结构…

Dubbo之RPC架构

为什么会有dubbo的出现: 随着互联网的发展&#xff0c;网站应用的规模不断扩大&#xff0c;常规的垂直应用架构已无法应对&#xff0c;分布式服务架构以及流动计算架构势在必行&#xff0c;亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时&#xff0c…

区域路由的注册机制

AreaRegistration.RegisterAllAreas() 我们新建一个名称为Admin的Area&#xff0c;VS生成下面的代码。 { action , id 我们先来看AreaRegistration这个抽象类&#xff0c;实际上&#xff0c;它只有一个核心功能&#xff0c;就是RegisterAllAreas&#xff0c;获取所有继承它的…

Unix/Linux IPC及线程间通信总结

一、互斥与同步 1.互斥&#xff1a;是指某一资源同时只允许一个访问者对其进行访问&#xff0c;具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序&#xff0c;即访问是无序的。 2.同步&#xff1a;是指在互斥的基础上&#xff08;大多数情况&#xff09;&#xff0…

CSS样式的插入方式

1.外部样式&#xff1a; 当样式需要应用于很多页面时&#xff0c;外部样式表将是理想的选择。<head><link rel"stylesheet" type"text/css" href"mystyle.css" /> </head> 2.内部样式 当单个文档需要特殊的样式时&#…

嵌入式Linux系统基础知识

一、嵌入式Linux系统的构成 1、硬件 2、内核 3、应用程序&#xff08;形成根文件系统&#xff09; 二、构建嵌入式Linux系统的主要任务 1、内核部分 2、应用程序部分 嵌入式Linux的开发大致可分为三个层次&#xff1a;引导装载内核、构造文件系统和图形用户界面。作为操作系统…

win10系统javac不是内部或外部命令,也不是可运行的程序 或批处理文件。

按照下面的步骤设置环境变量 说明&#xff1a; 1. 如果编辑的是系统环境变量&#xff0c;命令提示符需要以管理员权限运行&#xff1b;如果在用户环境变量中编辑&#xff0c;则当前用可直接运行命令提示符。 2. win10中的路径相对于win7要设置成绝对路径。 1&#xff0e;打开…

两个bat文件

1、修改后缀名 ren *.cs *.txt ren *.txt *.zip2、修改文件名称 echo offset a00setlocal EnableDelayedExpansionfor %%n in (*.txt) do (set /A a1ren "%%n" "!a!.txt")