zoukankan      html  css  js  c++  java
  • HDU 4430 Yukari's Birthday

    题意:在一个蛋糕上放n个蜡烛,摆成r个同心圆,中心可放可不放,对于第i个同心圆,放ki个蜡烛,问k*r最小时的k和r,如果k*r相同要求输出r小的。

    解法:因为k最小是2,根据等比数列通项公式算出r不超过40,所以只要枚举r,二分求出对应的k,找到最小的k*r就可以了。

    代码:看看以前的代码风格还真是丑……

    #include<stdio.h>
    long long FIND(long long k,long long n)
    {
        long long l=2,r=n;
        long long m=(l+r)/2;
        while(l<=r)
        {
            m=(l+r)/2;
            long long tmp=1;
            long long sum=1;
            for(int i=0;i<k;i++)
            {
                if(m>n/sum)
                {
                    tmp=n+2;
                    break;
                }
                sum*=m;
                tmp+=sum;
                if(tmp>n+1)
                    break;
            }
            if(tmp==n||(tmp-1)==n)
                return m;
            else if(tmp>n)
                r=m-1;
            else
                l=m+1;
    
        }
        return -1;
    }
    int main()
    {
        long long n,r,k;
        while(~scanf("%I64d",&n))
        {
            r=1,k=n-1;
            long long minn=n-1;
            for(long long i=1; i<45; i++)
            {
                long long ans=FIND(i,n);
                if(ans!=-1&&i*ans<minn)
                {
                    minn=i*ans;
                    r=i;
                    k=ans;
                }
            }
            printf("%I64d %I64d
    ",r,k);
        }
    }
    

      

  • 相关阅读:
    CF1260F
    牛客挑战赛34 A~E
    CSP-S2019游记&拆塔记
    6424. 【NOIP2019模拟2019.11.13】我的订书机之恋
    CF1257E/F
    6423. 【NOIP2019模拟11.11】画
    1222/2516. Kup
    Comet OJ
    浅析CSS定位
    css文字颜色渐变的3种实现
  • 原文地址:https://www.cnblogs.com/Apro/p/4704342.html
Copyright © 2011-2022 走看看