Description

分别给你4个长方形的长和宽,问这4个长方形中,是否能选出3个组成一个大的长方形。

Input

第一行输入一个整数T(T<=100),表示一共有T组数据

每组数据包含一行,有8个整数,分别为h1、w1、h2、w2、h3、w3、h4、w4。这些整数的范围在[1,1000]

Output

如果可以组成一个大长方形就输出“Yes”(不包括引号),否则输出“No”(不包括引号)

Sample Input

2
1 1 1 1 1 2 2 2
1 1 2 2 10 10 20 20

Sample Output

Yes
No

HINT

C++版本一

 

#include <bits/stdc++.h>
#define pi acos(-1)
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int INF = 0x3f3f3f3f;
const int maxn = 10;
const LL mod = 1e9 + 7;
 
int X[maxn], Y[maxn];
 
bool solve(int* x, int* y) {
    if (x[0] == x[1] && x[1] == x[2]) return true;
    //if (y[0] == y[1] && y[1] == y[2]) return true;
    if (x[0] + x[1] == x[2] && y[0] == y[1]) return true;
    return false;
}
 
bool judge () {
    int tmpx[maxn], tmpy[maxn];
    for (int i = 0; i < 4; i++) {
        tmpx[0] = X[i];
        tmpy[0] = Y[i];
 
        for (int j = 0; j < 4; j++) {
            if (i == j) continue;
 
            tmpx[1] = X[j];
            tmpy[1] = Y[j];
 
            for (int k = 0; k < 4; k++) {
                if (k == i || k == j) continue;
 
                tmpx[2] = X[k];
                tmpy[2] = Y[k];
 
                for (int s = 0; s < 8; s++) {
                    for (int t = 0; t < 3; t++) if (s&(1<<t)) swap(tmpx[t], tmpy[t]);
                    if (solve(tmpx, tmpy)) return true;
                    for (int t = 0; t < 3; t++) if (s&(1<<t)) swap(tmpx[t], tmpy[t]);
                }
            }
        }
    }
    return false;
}
 
int main () {
    //freopen("data1.in", "r", stdin);
    //freopen("data1.out", "w", stdout);
    int cas;
    scanf("%d", &cas);
    while (cas--) {
        for (int i = 0; i < 4; i++) scanf("%d%d", &X[i], &Y[i]);
        printf("%s\n", judge() ? "Yes" : "No");
    }
    return 0;
}

C++版本二

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <queue>
using namespace std;
typedef long long ll;
const int N=10000;
int t,n,m,flag;
int a[5][2],vis[5],l,r;
int b[5][2];
void bfs(int k){
    if(k==4){
        for(int i=0;i<=1;i++){
            for(int j=0;j<=1;j++){
                for(int k=0;k<=1;k++){
                    if(b[1][i]==b[2][j]+b[3][k]&&b[2][1-j]==b[3][1-k])
                        flag=1;
                    if(b[1][i]==b[2][j]&&b[1][i]==b[3][k]&&b[2][j]==b[3][k])
                        flag=1;
                }
            }
        }
        return;
    }
    for(int i=1;i<=4&&flag==0;i++){
        if(vis[i]==0){
            vis[i]=1;
            b[k][0]=a[i][0];
            b[k][1]=a[i][1];
            bfs(k+1);
            vis[i]=0;
        }
    }
}
int main()
{
scanf("%d",&t);
    while(t--){
        flag=0;
        for(int i=1;i<=4;i++){
            scanf("%d%d",&a[i][0],&a[i][1]);
        }
        bfs(1);
        if(flag)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}