Advertisement

XTU OJ 1178 Rectangle

阅读量:
Rectangle
Description
题目描述 给你两个平行于坐标轴的矩形,请判断两者是不是相交(面积有重合的部分)? 输入 第一行是一个整数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

思路:中心横坐标和小于二分之一横边长和并且中心纵坐标和小于二分之一纵边长和

复制代码
 #include<stdio.h>

    
 #include<string.h>
    
 #include<math.h>
    
 int sheng(int a[])
    
 {
    
 	int t,i,j;
    
 	for(i=0;i<1;i++)
    
 	{
    
 		for(j=1;j<2;j++)
    
 		{
    
 			if(a[i]>a[j])
    
 			{
    
 				t=a[i];
    
 				a[i]=a[j];
    
 				a[j]=t;
    
 			}
    
 		}
    
 	}
    
 }
    
 int main()
    
 {
    
 	int k;
    
 	scanf("%d",&k);
    
 	while(k--)
    
 	{
    
 		int a[10],b[10],x1[10]={0},y1[10]={0},x2[10]={0},y2[10]={0},i,j;
    
 		double xa,xb,ya,yb,dx,dy,sx,sy,t,oax,oay,obx,oby;
    
 		for(i=0;i<4;i++)
    
 		{
    
 			scanf("%d",&a[i]);
    
 		}
    
 		for(i=0;i<4;i++)
    
 		{
    
 			scanf("%d",&b[i]);
    
 		}
    
 		x1[0]=a[0];
    
 		x1[1]=a[2];
    
 		y1[0]=a[1];
    
 		y1[1]=a[3];
    
 		x2[0]=b[0];
    
 		x2[1]=b[2];
    
 		y2[0]=b[1];
    
 		y2[1]=b[3];
    
 		sheng(x1);
    
 		sheng(y1);
    
 		sheng(x2);
    
 		sheng(y2);
    
 		oax=(x1[1]+x1[0])/2.0;
    
 		obx=(x2[1]+x2[0])/2.0;
    
 		oay=(y1[1]+y1[0])/2.0;
    
 		oby=(y2[1]+y2[0])/2.0;
    
 		xa=x1[1]-x1[0];
    
 		xb=x2[1]-x2[0];
    
 		ya=y1[1]-y1[0];
    
 		yb=y2[1]-y2[0];
    
 		if(xa>xb)
    
 		{
    
 			t=xa;
    
 			xa=xb;
    
 			xb=t;
    
 		}
    
 		if(ya>yb)
    
 		{
    
 			t=ya;
    
 			ya=yb;
    
 			yb=t;
    
 		}
    
 		if(oax>obx)
    
 		{
    
 			t=oax;
    
 			oax=obx;
    
 			obx=t;
    
 		}if(oay>oby)
    
 		{
    
 			t=oay;
    
 			oay=oby;
    
 			oby=t;
    
 		}
    
 		sx=(xa+xb)/2.0;
    
 		sy=(ya+yb)/2.0;
    
 		if(obx-oax<sx&&oby-oay<sy)
    
 		{
    
 			printf("Yes\n");
    
 		}
    
 		else
    
 		{
    
 			printf("No\n");
    
 		}
    
 	}
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~