2015北京区域赛 Mysterious Antiques in Sackler Museum 几何基础+思维

题意是,选出三个,看看是否可以凑成一个新的矩形。

#include<bits/stdc++.h>  
using namespace std;  
  
struct node  
{  
    int cnt[2];  
}a[5];  
  
bool Check(node x, node y, node z)  
{  
    for(int i = 0; i < 2; i++)  
        for(int j = 0; j < 2; j++)  
            for(int k = 0; k < 2; k++)  
                if(x.cnt[!i] == y.cnt[!j] && x.cnt[i] + y.cnt[j] == z.cnt[k])  //一大两小 
                    return 1;  //小的两边之和要等于大的一边,且两个小的另外一边要相等 
                else if(x.cnt[i] == y.cnt[j] && y.cnt[j] == z.cnt[k])  //三等分 
                    return 1;  
    return 0;   
}  
  
int main()  
{  
    bool flag;  
    int T;  
    cin >> T;  
    while(T--)  
    {  
        flag = 0;  
        for(int i = 0; i < 4; i++)  
            scanf("%d%d", &a[i].cnt[0], &a[i].cnt[1]);  
        for(int i = 0; i < 4; i++)  
            for(int j = 0; j < 4; j++)  
                for(int k = 0; k < 4; k++)  
                {  
                    if(i == j || j == k || i == k)  //不取重复的矩形 
                        continue;  
                    if(Check(a[i], a[j], a[k]))  
                        flag = 1;  
                }  
        if(flag)  
            cout << "Yes" << endl;  
        else  
            cout << "No" << endl;  
    }  
    return 0;  
}  
彼时当年少,莫负好时光。
原文地址:https://www.cnblogs.com/l609929321/p/7761900.html