B. Equal Rectangles

B. Equal Rectangles

给定4*N个数,是否能构成N个矩形

面积均相等

每次取两个大的,两个小的

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define sc(x) scanf("%I64d",&x);
#define read(A) for(int i=0;i<4*N;i++) scanf("%I64d",&A[i]);
#define P pair<ll,ll>
ll N;
ll q;
ll A[10005];
ll st;
int main()
{
    sc(q);
    while(q--)
    {
        sc(N);
        memset(A,0,sizeof A);
        for(int i=0; i<4*N; i++)
        {
            sc(st);
            A[st]++;
        }
 
        int j=10000;
        bool f=0;
        ll ans=-1,a,b;
        for(int i=1; i<=j; )
        {
            if(A[i]>=2)
            {
                A[i]-=2;
                a=i;
                while(j>=i&&A[j]==0)
                {
                    j--;
                }
                //  cout<<i<<A[j]<<j<<endl;
                if(A[j]>=2)
                {
                    A[j]-=2;
                    b=j;
                    if(ans==-1)
                    {
                        ans=a*b;
                    }
                    else if(ans!=a*b)
                    {
                        puts("NO");
                        f=1;
                        break;
                    }
                }
                else if(A[j]==1)
                {
                    puts("NO");
                    // cout<<"QWQ"<<'\n';
                    f=1;
                    break;
                }
                else
                {
                    puts("NO");
                    // cout<<"QWQ"<<'\n';
                    f=1;
                    break;
 
                }
 
            }
            else if(A[i]==1)
            {
                puts("NO");
                f=1;
                break;
            }
            else i++;
        }
        if(!f)puts("YES");
    }
 

 

posted @ 2019-08-14 22:48  liulex  阅读(216)  评论(0编辑  收藏  举报