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"); }