http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf
题意:
给你四个矩形,从中选出3个矩形【读题的时候没有看出只选三个矩形,交了三发罚时】,判断是否可以组成一个大的矩形
分析:
暴力深搜,先全排列判断顺序。。然后判断前两个是否可以组成一个新的,然后把这个矩形传递下去
代码:
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int a[10];
int b[10];
int c[10];
int ok;
void dfs(int x,int y,int len)
{
if(ok==1)return;
if(len==3)
{
ok=1;
return;
}
if(x==a[c[len]])
dfs(x,y+b[c[len]],len+1);
if(x==b[c[len]])
dfs(x,y+a[c[len]],len+1);
if(y==a[c[len]])
dfs(x+b[c[len]],y,len+1);
if(y==b[c[len]])
dfs(x+a[c[len]],y,len+1);
}
int main()
{
int t,i,j;
scanf("%d",&t);
while(t--)
{
ok=-1;
for(i=0;i<4;i++)
scanf("%d%d",&a[i],&b[i]);
for(int i=0;i<4;i++) c[i]=i;
do
{
if(ok==1)break;
dfs(a[c[0]],b[c[0]],1);
}while(next_permutation(c,c+4));
if(ok==1)
printf("Yes\n");
else
printf("No\n");
}
}
/*
10
4 8 3 8 1 7 6 8
4 8 3 8 1 7 6 7
1 1 1 1 1 2 2 2
1 1 2 2 10 10 20 20
2 1 2 1 2 4 3 6
6 3 4 2 2 1 1 2
*/