本文主要是介绍xtu oj 1178 Rectangle,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
给你两个平行于坐标轴的矩形,请判断两者是不是相交(面积有重合的部分)?
输入
第一行是一个整数K,表示样例数。 每个样例占两行,每行是4个整数,表示一个矩形的对角线点的坐标,坐标值为0到1,000之间。
输出
每个样例输出一个结果,相交输出Yes,否则输出No。
样例输入
2 0 0 1 1 1 1 2 2 0 0 2 2 1 1 3 3
样例输出
No Yes
AC代码
#include<stdio.h>
int Max(int a,int b){if(a>b)return a;else return b;
}
int Min(int a,int b){if(a>b)return b;else return a;
}
int main()
{int T;scanf("%d",&T);while(T--){int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);int x3,y3,x4,y4;scanf("%d%d%d%d",&x3,&y3,&x4,&y4);double ox1=(x1+x2)/2;//矩形中心坐标值 double oy1=(y1+y2)/2;double ox2=(x3+x4)/2;double oy2=(y3+y4)/2;double lx=(Max(x1,x2)-Min(x1,x2)+Max(x3,x4)-Min(x3,x4))/2;//两个矩阵相邻拼起来的一半 double ly=(Max(y1,y2)-Min(y1,y2)+Max(y3,y4)-Min(y3,y4))/2;double t1=Max(ox1,ox2)-Min(ox1,ox2);//中心坐标差值 double t2=Max(oy1,oy2)-Min(oy1,oy2);if(t1<lx&&t2<ly){printf("Yes\n");}else printf("No\n");}
}
解题思路:如果两个矩形中心点的横纵坐标的差都小于两个矩阵相邻拼接起来的长度的一半,则两个矩形相交。
AC代码
#include<stdio.h>
int Max(int a,int b){if(a>b)return a;else return b;
}
int Min(int a,int b){if(a>b)return b;else return a;
}
int main()
{int T;scanf("%d",&T);while(T--){int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);int x3,y3,x4,y4;scanf("%d%d%d%d",&x3,&y3,&x4,&y4);int t1,t2,t3,t4;int max1=Max(Min(x1,x2),Min(x3,x4));int min1=Min(Max(x1,x2),Max(x3,x4));int max2=Max(Min(y1,y2),Min(y3,y4));int min2=Min(Max(y1,y2),Max(y3,y4));if(max1<min1&&max2<min2){printf("Yes\n");}else printf("No\n");}
}
这篇关于xtu oj 1178 Rectangle的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!