关键在于正多边形!即找到相同长度的边,且答案要求最小周长(长度*边数)。
只要找到最小边数(都是3),最小长度即可
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
vector<int> nums(n);
for(int i=0;i<n;i++)
{
cin>>nums[i];
}
if(n < 3) //最小变长为3,小于直接no
{
cout<<"no"<<endl;
continue;
}
unordered_map<int,int> hash; //记录长为nums[i]的木棍多少个
for(int i=0;i<n;i++)
{
if(hash.count(nums[i]))
{
hash[nums[i]]++;
}
else
{
hash[nums[i]]=1;
}
}
bool flag=false;
int ans=1001; //最大10*1000
for(auto &[k,m]:hash)
{
if(m < 3)continue; //不足三个 不能组成正多边形
else
{
ans=min(ans,k*3); //周长=长度*3 维护最小周长
flag=true;
}
}
if(flag)
cout<<"yes"<<endl<<ans<<endl;
else
cout<<"no"<<endl;
}
}