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;
}