1. 程式人生 > >Mysterious Antiques in Sackler Museum

Mysterious Antiques in Sackler Museum

滴答滴答題目連結

題意:有t組資料,每組給定4個長方形的寬和高,問是否能從中任取三個構成一個嚴格的長方形,嚴格的長方形指的是長方形內部沒有空缺。

題解:從中任取三個,進行判斷即可,寫成結構體用函式判斷可以大幅減少程式碼量

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <map>
#include <vector>
#include <cstring>
using namespace std;
struct D{
    int w,h;
    D(int w0=0,int h0=0) {
        w = w0;
        h = h0;
    }
}data[4];
D ll(D a,D b){
    if(a.w==b.w) return D(a.w,a.h+b.h);
    else if(a.h==b.w) return D(a.h,a.w+b.h);
    else if(a.h==b.h) return D(a.h,a.w+b.w);
    else if(a.w==b.h) return D(a.w,a.h+b.w);
    else return D(0,0);
}
bool pd(D a,D b,D c){
    D tmp;
    tmp = ll(a,b);
    tmp = ll(tmp,c);
    if(tmp.w>0) return true;
    tmp = ll(a,c);
    tmp = ll(tmp,b);
    if(tmp.w>0) return true;
    tmp = ll(b,c);
    tmp = ll(tmp,a);
    if(tmp.w>0) return true;
    return false;
}
bool solve() {
    if(pd(data[0],data[1],data[2])) return true;
    if(pd(data[0],data[1],data[3])) return true;
    if(pd(data[0],data[2],data[3])) return true;
    if(pd(data[1],data[2],data[3])) return true;
    return false;
}
int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        for(int i=0;i<4;i++) {
            scanf("%d%d",&data[i].w,&data[i].h);
        }
        if(solve()) puts("Yes");
        else puts("No");
    }
}