题目链接:CF1203B
标签:数学、贪心
大意:给出一组长方形的边长(4n个),问是否能组成n个面积相同的长方形
思路:很简单就每次取最长边最短边相乘看看是否始终相等,要注意一下细节(因为各种奇怪细节wa)
代码:
#include <iostream>
#include <queue>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
int q,n,length[205],mark[10005],x,j=0;//q案例数,length存储长度,mark记录是偶数次读入还是奇数次读入
cin>>q;
while(q--)
{
j=0;
cin>>n;
int sq=0;
memset(mark,0,sizeof(mark));
memset(length,0,sizeof(length));
for(int i=0;i<4*n;i++)
{
cin>>x;
mark[x]++;
if(mark[x]%2==1)//奇数次读入就存起来
{
length[j]=x;
j++;
}
}
if(j>2*n)
cout<<"NO"<<endl;//如果不满足两两成对输出NO
else{
sort(length,length+2*n); //第一次交的时候忘记排序了(而且不排竟然还能过样例)
if(n==1)
cout<<"YES"<<endl;
else
{
sq=length[0]*length[2*n-1];
for(int i=0;i<n;i++)
{
int sqt=length[i]*length[2*n-i-1];
if(sq!=sqt)
{
sq=0;
break;
}
}
if(sq)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
}
}