zoukankan      html  css  js  c++  java
  • hdu 4430 Yukari's Birthday(二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4430

    题意:要在一个蛋糕上放置n个糖果,摆成r个同心圆,每个同心圆的糖果数为k^i,中间圆心可以放一个糖果或者不放,使得r*k最小,若有多个答案输出r最小的那个。

    18<=n<=10^12,k>=2,1<=i<=r

    分析:r最多也就40,而k最多100000,枚举r,然后二分找出k就行了,二分的时候sum可能会溢出,所以判断是否大于n跳出就行了,其实不难的,但是由于我的疏忽看错题意了,没注意到中心可放或可不放,导致wa到死,练习的时候坑队友坑到结束,应该认真看看题目的,哎~~~~

    AC代码:

     1 #include<stdio.h>
     2 #define LL long long
     3 #define INF 0x7fffffff
     4 LL binary(int r,LL n)
     5 {
     6     int i;
     7     LL low=2,high=1000000,mid,s,sum;
     8     while(low<=high)
     9     {
    10         mid=(low+high)>>1;
    11         s=1,sum=1;
    12         for(i=1;i<=r;i++)
    13         {
    14             s*=mid;
    15             sum+=s;
    16             if(sum>n)
    17                 break;
    18         }
    19         if(sum==n)
    20             return mid;
    21         else if(sum>n)
    22             high=mid-1;
    23         else
    24             low=mid+1;
    25     }
    26     return -1;
    27 }
    28 int main()
    29 {
    30     int r,i;
    31     LL n,k,tmp,Min;
    32     while(scanf("%lld",&n)!=EOF)
    33     {
    34         Min=INF;
    35         r=1,k=n-1;
    36         for(i=1;i<64;i++)
    37         {
    38             tmp=binary(i,n);
    39             if(tmp!=-1)
    40             {
    41                 if(tmp*i<Min)
    42                 {
    43                     Min=tmp*i;
    44                     r=i,k=tmp;
    45                 }
    46             }
    47             tmp=binary(i,n+1);
    48             if(tmp!=-1)
    49             {
    50                 if(tmp*i<Min)
    51                 {
    52                     Min=tmp*i;
    53                     r=i,k=tmp;
    54                 }
    55             }
    56         }
    57         printf("%d %lld
    ",r,k);
    58     }
    59     return 0;
    60 }
    View Code
  • 相关阅读:
    PAT (Advanced Level) Practice 1097 Deduplication on a Linked List (25分) (静态链表+测试实例)
    PAT (Advanced Level) Practice 1096 Consecutive Factors (20分)
    POJ
    LightOJ
    LibreOJ
    SGU 223 国王 状压DP
    HDU
    CodeForces
    【模板】 拉格朗日插值
    模板 求二次剩余
  • 原文地址:https://www.cnblogs.com/frog112111/p/3405659.html
Copyright © 2011-2022 走看看