[poj] 3304 Segments || 判断线段相交
原题
给出n条线段,判断是否有一条直线与所有线段都有交点
若存在这样一条直线,那么一定存在一条至少过两个线段的端点的直线满足条件。
每次枚举两条线段的两个端点,确定一条直线,判断是否与其他线段都有交点。
判断交点:
判断AB和CD是否相交,即判断AC×BD(叉积)和AD×BC(叉积)是否同号
#include<cstdio>
#define eps 1e-13
#define N 110
using namespace std;
int t,n;
struct point
{
double x,y;
point() {}
point(double _x,double _y) : x(_x),y(_y) {}
double operator * (const point &b) const
{
return x*b.y-b.x*y;
}
point operator - (const point &b) const
{
return point(b.x-x,b.y-y);
}
bool operator == (const point &b) const
{
return x==b.x && y==b.y;
}
void read()
{
scanf("%lf%lf",&x,&y);
}
};
struct hhh
{
point s,t;
}a[N];
bool check(point aa,point bb)
{
if (aa==bb) return 0;
for (int i=1;i<=n;i++)
if (((aa-a[i].s)*(aa-bb))*((aa-a[i].t)*(aa-bb))>eps) return 0;
return 1;
}
bool solve()
{
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++)
if (check(a[i].s,a[j].t) || check(a[j].s,a[i].t)) return 1;
else if (check(a[i].s,a[j].s) || check(a[i].t,a[j].t)) return 1;
return 0;
}
int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
a[i].s.read(),a[i].t.read();
if (n<3 || solve()) puts("Yes!");
else puts("No!");
}
return 0;
}
[poj] 3304 Segments || 判断线段相交的更多相关文章
- POJ 3304 Segments 判断直线和线段相交
POJ 3304 Segments 题意:给定n(n<=100)条线段,问你是否存在这样的一条直线,使得所有线段投影下去后,至少都有一个交点. 思路:对于投影在所求直线上面的相交阴影,我们可以 ...
- poj 3304(直线与线段相交)
传送门:Segments 题意:线段在一个直线上的摄影相交 求求是否存在一条直线,使所有线段到这条直线的投影至少有一个交点 分析:可以在共同投影处作原直线的垂线,则该垂线与所有线段都相交<==& ...
- POJ 1066--Treasure Hunt(判断线段相交)
Treasure Hunt Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7857 Accepted: 3247 Des ...
- POJ 3304 Segments (判断直线与线段相交)
题目链接:POJ 3304 Problem Description Given n segments in the two dimensional space, write a program, wh ...
- POJ 3304 Segments 基础线段交判断
LINK 题意:询问是否存在直线,使得所有线段在其上的投影拥有公共点 思路:如果投影拥有公共区域,那么从投影的公共区域作垂线,显然能够与所有线段相交,那么题目转换为询问是否存在直线与所有线段相交.判断 ...
- POJ 2556 (判断线段相交 + 最短路)
题目: 传送门 题意:在一个左小角坐标为(0, 0),右上角坐标为(10, 10)的房间里,有 n 堵墙,每堵墙都有两个门.每堵墙的输入方式为 x, y1, y2, y3, y4,x 是墙的横坐标,第 ...
- POJ 1556 计算几何 判断线段相交 最短路
题意: 在一个左下角坐标为(0,0),右上角坐标为(10,10)的矩形内,起点为(0,5),终点为(10,5),中间会有许多扇垂直于x轴的门,求从起点到终点在能走的情况下的最短距离. 分析: 既然是求 ...
- POJ 3304 Segments(判断直线与线段是否相交)
题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...
- POJ 3304 Segments(计算几何:直线与线段相交)
POJ 3304 Segments 大意:给你一些线段,找出一条直线可以穿过全部的线段,相交包含端点. 思路:遍历全部的端点,取两个点形成直线,推断直线是否与全部线段相交,假设存在这种直线,输出Yes ...
随机推荐
- 树梅派3B kali2.0 启用SSH进行远程登录
工具/原料 kali 2.0 ssh SSH连接工具(XShell)or PUTTY vi /etc/ssh/sshd_config 将#PasswordAuthentication no的注释去掉, ...
- 图的m着色
图的m着色 #include <bits/stdc++.h> using namespace std; int n, k, m, ans; struct node{ int m, colo ...
- JS - 把类似document.querySelectorAll(".xxx")、document.getElementsByName("xxx")这种方法的返回结果转换成数组对象
var btns = document.querySelectorAll(".btn");console.log(btns instanceof Array); // falseb ...
- shell脚本结构化语句
本文中记录一下shell中的两种循环语句:for和while for循环 for循环是linux shell中最常用的结构,for循环有三种结构:1.列表for循环.2.不带列表for循环.3.C风格 ...
- 屏蔽datatable错误提示
$.fn.dataTable.ext.errMode = 'none'; //不显示任何错误信息// 以下为发生错误时的事件处理,如不处理,可不管.$('#productionRequestItems ...
- RabbitMQ (1) 环境安装
1.下载erlang, 设置系统的环境变量 下载地址:http://www.erlang.org/downloads ERLANG_HOME=D:\Program\erl9.3 Path = %ERL ...
- eclipse引入jquery文件报错解决
以下内容是小编给大家带来的关于Eclipse引入jquery报错如何解决的全部叙述,具体内容如下所示: 第一步: 去除eclipse的JS验证: 将windows->preference-> ...
- 无序数组中第K大的数
1. 排序法 时间复杂度 O(nlogn) 2. 使用一个大小为K的数组arr保存前K个最大的元素 遍历原数组,遇到大于arr最小值的元素时候,使用插入排序方法,插入这个元素 时间复杂度,遍历是 O( ...
- Alice’s Stamps HDU - 6249 (区间DP)
点击传送 Alice’s Stamps Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- 基于itchat定制聊天机器人
#coding=utf8import requestsimport itchat #key自己到图灵注册一个 KEY = '************************************** ...