51nod 1264 基础

来源:互联网 发布:py是什么意思啊网络 编辑:程序博客网 时间:2024/06/12 19:48

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;}
0 0
原创粉丝点击