2015 ACM/ICPC北京賽區現場賽G
阿新 • • 發佈:2018-12-12
題意:
給你四個矩形,從中選出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 */