hihoCoder #1040 : 矩形判断

#1040 : 矩形判断

时间限制:1000ms

单点时限:1000ms

内存限制:256MB

描述

给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形。

输入

输入第一行是一个整数T(1<=T<=100),代表测试数据的数量。

每组数据包含4行,每行包含4个整数x1, y1, x2, y2 (0 <= x1, y1, x2, y2 <= 100000);其中(x1, y1), (x2,y2)代表一条线段的两个端点。

输出

每组数据输出一行YES或者NO,表示输入的4条线段是否恰好围成矩形。

样例输入

3
0 0 0 1
1 0 1 1
0 1 1 1
1 0 0 0
0 1 2 3
1 0 3 2
3 2 2 3
1 0 0 1
0 1 1 0
1 0 2 0
2 0 1 1
1 1 0 1

样例输出

YES
YES
NO

 

#include
#include
#include 
using namespace std;
struct EDGE{
	int x1,y1,x2,y2;	
};
int main(void){
     int T;
     scanf("%d",&T);
     struct EDGE egde[4];
     int vis[4];
     while(T--){
           for(  int i=0;i<=3;i++) { 
				 scanf("%d%d",&egde[i].x1,&egde[i].y1);      
                 scanf("%d%d",&egde[i].x2,&egde[i].y2);      
			     vis[i] = 0;
			}
            int cnt = 0;
            int flag1  = 0,flag2 = -1;
            int t1 = -1,t2=-1;
            for( int i = 0; i<=3; i++){
           	     if( !vis[i] ){
           	     	  for( int j=0;j<=3;j++){
           	    	 	   if( i!=j  && !vis[j] ){
           	    	 	       if( abs( egde[i].x1 - egde[i].x2 ) == abs( egde[j].x1 - egde[j].x2 ) && abs( egde[i].y1 - egde[i].y2 ) == abs( egde[j].y1 - egde[j].y2 ) || abs( egde[i].x1 - egde[i].x2 ) == abs( egde[j].y1 - egde[j].y2 ) && abs( egde[i].y1 - egde[i].y2 ) == abs( egde[j].x1 - egde[j].x2 ) ){
           	    	 	           vis[i] = ++cnt;
     							   vis[j] = cnt;   	
	                               if( flag1 == 0  ){
	                               	   t1 = i;
	                               	   flag2++;
								       flag1 =1;
								   }
								   else if( flag1 == 1 && flag2 == 0 ) {  
								       t2 = i;
								       flag2++; 
								   }
								   break;
	  							  }
								 }
						} 
		     }
	      }
	       int target = 0;
	       if( flag2 == 1 ){
	           if(  abs( egde[t1].x1 - egde[t1].x2 ) * abs( egde[t2].x1 - egde[t2].x2 ) == abs( egde[t1].y1 - egde[t1].y2 ) * abs( egde[t2].y1 - egde[t2].y2 ) || abs( egde[t1].x1 - egde[t1].x2 ) * abs( egde[t2].y1 - egde[t2].y2 ) == abs( egde[t1].y1 - egde[t1].y2 ) * abs( egde[t2].x1 - egde[t2].x2 )  )	   
			   target =1;	     
		   }
	       
 	       if( cnt == 2  && target == 1 ){
            printf("YES\n");
		   } 
	      else {
		   	    printf("NO\n");
             }   
}
    return 0;
}

 

你可能感兴趣的:(蓝桥杯)