(图论)51NOD 1264 线段相交
输入
第1行:一个数T,表示输入的测试数量(1 <= T <= 1000)
第2 - T + 1行:每行8个数,x1,y1,x2,y2,x3,y3,x4,y4。(-10^8 <= xi, yi <= 10^8)
(直线1的两个端点为x1,y1 | x2, y2,直线2的两个端点为x3,y3 | x4, y4)
输出
输出共T行,如果相交输出"Yes",否则输出"No"。
输入样例
2
1 2 2 1 0 0 2 2
-1 1 1 1 0 0 1 -1
输出样例
Yes
No
解:
方法一(函数):
已知两点,故可以求得两点所在直线方程Ax+By+C=0。
Ax1+By1=Ax2+By2----->A=k(y2-y1);B=k(x1-x2);C=k(x2y1-x1y2);
另两点位置不应位于直线同侧(四点共线需特殊判断)。
将另两点坐标分别带入方程,比较结果与零的关系,可以判断两点与直线的相对位置关系。
(其实写这道题最大的收获是对于?:运算符的使用有了更多的理解)
#include <stdio.h> long long num[];
int cfun()
{
long long a, b, c, fg1, fg2;
a = num[] - num[];
b = num[] - num[];
c = num[] * num[] - num[] * num[];
fg1 = a * num[] + b * num[] + c > ? : a * num[] + b * num[] + c == ? : -;///
fg2 = a * num[] + b * num[] + c > ? : a * num[] + b * num[] + c == ? : -;
if (fg1 * fg2 > ) return ;
else if ( == (fg1 | fg2))//不加这段if判断也可以ac,但其实程序并没有对于四点一线特殊情况的判断。
{
int max[], min[];
max[] = num[] > num[] ? (min[] = num[], num[]) : (min[] = num[], num[]);///
max[] = num[] > num[] ? (min[] = num[], num[]) : (min[] = num[], num[]);
if (max[] < min[] || max[] < min[]) return ;
else return ;
}
a = num[] - num[];
b = num[] - num[];
c = num[] * num[] - num[] * num[];
fg1 = a * num[] + b * num[] + c > ? : -;
fg2 = a * num[] + b * num[] + c > ? : -;
if (fg1 * fg2 > ) return ;
return ;
} int main()
{
int t;
while (scanf_s("%d", &t) != EOF)
{
//FILE *fp;
//fopen_s(&fp, "a.txt", "w" );
while (t--)
{
scanf_s("%lld%lld%lld%lld%lld%lld%lld%lld", &num[], &num[], &num[], &num[], &num[], &num[], &num[], &num[]);
fprintf(stdout,"%s\n", cfun() > ? "Yes": "No");
}
//fclose(fp);
}
return ;
}
方法二(向量):
从网上看到的做法,简单的说就是通过两个实验
1.快速排斥实验(判断以两点为对角线的矩形的重合情况)
2.跨立实验(判断两点连线与另两点的相对位置关系【进行两次】)
从而得出答案。
其实两种方法殊途同归,从数学的角度可以借此看出一些一次函数和向量的关系。
(图论)51NOD 1264 线段相交的更多相关文章
- 51nod 1264 线段相交(几何)
题目链接:51nod 1264 线段相交 如果两条线段相交,则需满足一条线段的一个端点在另一条线段上,或者 两条线段都分别跨越另一条线段延伸的直线上.(如果点p1位于直线p3p4的一边,而点p2位于该 ...
- 51Nod 1264 线段相交(计算几何)
1264 线段相交 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相 ...
- 判断线段相交 -- 51nod 1264 线段相交
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1264 三角形的有向面积:a.x*b.y+b.x*c.y+c.x*a.y ...
- 51nod 1264 线段相交——计算几何
题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1264 检查点的位置就行了,具体见注释. /* (a-c)×(d-c)*(d ...
- 51nod 1264 线段相交
题目:传送门. 题意:给两条线段,有一个公共点或有部分重合认为相交,问他们是否相交. 题解:这属于非规范相交的情况,模板题. #include <iostream> #include &l ...
- 51nod1264线段相交
1264 线段相交 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交, ...
- (计算几何 线段判交) 51nod1264 线段相交
1264 线段相交 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No". ...
- 51nod--1264 线段相交 (计算几何基础, 二维)
题目: 1264 线段相交 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为 ...
- 51Nod 1264:线段相交(计算几何)
51Nod 1264:线段相交 Decision 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出&q ...
随机推荐
- 【Nginx】处理用户请求
实际处理请求的方法ngx_http_mytest_handler(在配置配置项的回调方法中被调用(用于解析配置项))将接收一个ngx_http_request_t类型的参数,返回一个ngx_int_t ...
- 了解kaggle
Kaggle官网 数据挖掘的比赛,主要是特征工程 Kaggle 数据挖掘比赛经验分享 Kaggle 机器学习竞赛冠军及优胜者的源代码汇总 程序化广告交易中的点击率预估
- HTML的DIV如何实现垂直居中
外部的DIV必须有如下代码 display:table-cell; vertical-align:middle; 这样可以保证里面的东西,无论是DIV还是文本都可以垂直居中
- RxJava系列之中的一个 初识Rxjava
1.简单介绍 基础知识 响应式代码的基本组成部分是Observables和Subscribers(事实上Observer才是最小的构建块,但实践中使用最多的是Subscriber.由于Subscrib ...
- hdu5399Too Simple
//给m个函数 //其相应是自变量x属于{1,2,...n} //f(x)属于{1,2...3} //给出当中一些函数,问有多少种不同的函数集合使得 //1<=i<=n f1(f2(f3. ...
- 淘宝API学习之道:淘宝TOP之API接口接入教程
作为一个中小型站点开发人员,淘宝API的开放大大缩短了站点的开发周期和运作效率.面对海量的数据.开发人员仅仅要细致阅读开发文档,熟悉对应的接口,就能够把数据导入自己的站点,这样就不必望洋兴叹了. 眼下 ...
- WHU-1551-Pairs(莫队算法+分块实现)
Description Give you a sequence consisted of n numbers. You are required to answer how many pairs of ...
- 修正iOS从照相机和相册中获取的图片 方向
修正iOS从照相机和相册中获取的图片 方向 修正iOS从照相机和相册中获取的图片 方向 使用系统相机拍照得到的图片的默认方向有时不是ImageOrientationDown,而是ImageOrie ...
- ./configure && make && make install详解 (转)
在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README INSTALL两个说明文件,这两个文件会清楚的告诉你如何可以正确的完成这个软件的安装! 我们都知道源码包安装分为这么几个 ...
- 为Html.EditorForModel自定义模版
对于MVC视图渲染来说,大家应该不会陌生,但对于模型的渲染,不知道是否听说过,主要是说Model通过它属性的相关特性(DataType,UIHint)来将它们自动渲染到View上,这是一个比较不错的技 ...