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);
        }
    }
    
  • 相关阅读:
    java高级语法4:集合
    java高级语法3:异常和注解
    Java高级语法2:Lambda表达式
    VS编译时卡在正在从以下位置加载xxx.dll符号
    mysql中的外键
    localhost和127.0.0.1的区别
    添加依赖项
    代码版本控制——TFS
    优化版冒泡排序
    visual studio vode 汉化
  • 原文地址:https://www.cnblogs.com/kuronekonano/p/11135709.html
Copyright © 2011-2022 走看看