您的位置:首页 > 其它

51nod 1264 基础

2016-06-07 10:57 417 查看
1264 线段相交

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注

给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交)。 如果相交,输出”Yes”,否则输出”No”。

Input

第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)

Output

输出共T行,如果相交输出”Yes”,否则输出”No”。

Input示例

2

1 2 2 1 0 0 2 2

-1 1 1 1 0 0 1 -1

Output示例

Yes

No

把解题的过程用代码敲出来

#include <iostream>
#include <cmath>
#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <iomanip>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
double x1,y1,x2,y2,x3,y3,x4,y4;
cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
double k1,k2,b1,b2;
k1=(y2-y1)/(x2-x1);
k2=(y4-y3)/(x4-x3);
b1=y1-k1*x1;
b2=y3-k2*x3;
double x;
x=(b1-b2)/(k2-k1);
double a,b,c,d;
a=min(x1,x2);
b=max(x1,x2);
c=min(x3,x4);
d=max(x3,x4);
if(x>=a&&x<=b&&x>=c&&x<=d) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: