zoukankan      html  css  js  c++  java
  • Codeforces Round 49 C-Minimum Value Rectangle(最小面积周长比)

    传送门:http://codeforces.com/problemset/problem/1027/C
    题意:给出1e6+7条边,组成一个矩形,使得其周长面积比最小

    很水的一个暴力题,处理一下给出的数据即可。把每条边计数,然后去重离散化,两个两个为一组,接着直接计算从大到小排序后相邻两个的周长面积比,取最小即可。然而当时并没有想到这么做。。。。

    #include<bits/stdc++.h>
    #define LL long long
    #define M(a,b) memset(a,b,sizeof a)
    #define pb(x) push_back(x)
    using namespace std;
    const int maxn=1e6+7;
    int t,n,a[maxn],b[maxn],cnt[10800];
    bool vis[10800];
    int main()
    {
        scanf("%d",&t);
        while(t--)
        {
            M(vis,false);
            M(cnt,0);
            scanf("%d",&n);
            for(int i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                cnt[a[i]]++;///记录每条边出现次数
            }
            sort(a,a+n);
            int num=0;
            for(int i=0;i<n;i++)
            {
                if(cnt[a[i]]<2||vis[a[i]])continue;///数量不够2条的长度舍去,已经离散化的边舍去
                int sum=cnt[a[i]];
                while(sum>=2)///把边分成2个2个一组,这样能保证正方形也在计算之内
                {
                    b[num++]=a[i];
                    sum-=2;
                }
                vis[a[i]]=true;
            }
            double ans=100000000000;
            int aa,bb;
            for(int i=0;i<num-1;i++)
            {
                double tmp=4.0*(b[i]+b[i+1])*(b[i]+b[i+1])/(1.0*b[i+1]*b[i]);
                if(tmp<ans)
                {
                    ans=tmp;
                    aa=b[i],bb=b[i+1];
                }
            }
            printf("%d %d %d %d
    ",aa,aa,bb,bb);
        }
    }
    
  • 相关阅读:
    第八周学习进度总结
    全国(球)疫情信息可视化
    第六周学习进度总结
    手把手教你爬取B站弹幕!
    Xpath基础学习
    团队成员及选题介绍
    第五周学习进度
    课堂练习之疫情APP
    SpringMVC02
    06 | 链表(上):如何实现LRU缓存淘汰算法?
  • 原文地址:https://www.cnblogs.com/kuronekonano/p/11135709.html
Copyright © 2011-2022 走看看