http://codeforces.com/contest/1027/problem/C
题意:题意:给出n根木棍的长度,求从中选择4根,能组成最小的(周长的平方/面积)的值的4根的长度。
化简之后就是求x/y+y/x的最小值。
输入输出的时候用scanf(),printf()。set<type>s,s.begin()返回的是iterator;
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define maxn 1000005
using namespace std;
map<int,int>vis;
set<int>s;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
vis.clear();
s.clear();
int n,temp,flag=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
vis[temp]++;
if(vis[temp]>=2) s.insert(temp);
if(vis[temp]>=4) flag=temp;
}
if(s.size()==1)
{
for(int i=0;i<4;i++)
printf("%d ",*s.begin());
printf("\n");
}
else if(flag)
{
for(int i=0;i<4;i++)
printf("%d ",flag);
printf("\n");
}
else
{
double ans=inf;
int h,w,hh,ww;
h=*s.begin();
s.erase(s.begin());
while(!s.empty())
{
int w=*s.begin();s.erase(s.begin());
double temp=1.0*w/h+1.0*h/w;
if(ans>temp)
{
ans=temp;
hh=h;
ww=w;
}
h=w;
}
printf("%d %d %d %d\n",hh,hh,ww,ww);
}
}
return 0;
}