C. Minimum Value Rectangle

1640 단어 ACMCF
http://codeforces.com/contest/1027/problem/C
제목: n 개의 나무 막대기 의 길 이 를 제시 하고 그 중에서 4 개의 길 이 를 선택 하여 가장 작은 (둘레 의 제곱 / 면적) 값 의 4 개의 길 이 를 구성 할 수 있 습 니 다.
간소화 한 후에 x / y + y / x 의 최소 값 을 구 합 니 다.
입 출력 할 때 scanf (), printf () 를 사용 합 니 다.sets, s. begin () 은 iterator 를 되 돌려 줍 니 다.
#include
#define inf 0x3f3f3f3f
#define maxn 1000005
using namespace std;
mapvis;
sets;
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=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("
"); } else if(flag) { for(int i=0;i<4;i++) printf("%d ",flag); printf("
"); } 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
",hh,hh,ww,ww); } } return 0; }

좋은 웹페이지 즐겨찾기