• HDU4430 Yukari's Birthday(枚举+二分)


    Yukari's Birthday  HDU4430

     

    就是枚举+二分:

    注意处理怎样判断溢出。。。(因为题目只要10^12)

    先前还以为要用到快速幂和等比数列的快速求和(但肯定会超__int64)

    而且这样判断会超时的。。。

    还有题目中的And it's optional to place at most one candle at the center of the cake. (中间的蜡烛可有可无)

    还有观察数据就知道:因为n最大10^12,r最多枚举到40,然后二分k的结果,看是否有符合条件的k存在。

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <algorithm>
     4 using namespace std;
     5 const __int64 N=1000010;
     6 __int64 fun1(__int64 k,__int64 r,__int64 n)
     7 {
     8     __int64 s=0,t=k;
     9     for(int i=1;i<=r;i++)
    10     {
    11         s+=t;
    12         if(s > n)//判断在求和的过程中是否已经比n大(可省时很多且不会超__int64)
    13             return N*N;
    14         t*=k;
    15     }
    16     return s;
    17 }
    18 __int64 fun(__int64 r,__int64 n)
    19 {
    20     if(r == 1)
    21         return n;
    22     __int64 mid,p,lef=2,rig=N;
    23     while(lef <= rig)
    24     {
    25         mid=(lef+rig)/2;
    26         p=fun1(mid,r,n);
    27         if(p == n)
    28             return mid;
    29         if(n > p)
    30             lef=mid+1;
    31         else
    32             rig=mid-1;
    33     }
    34     return -1;
    35 }
    36 int main()
    37 {
    38     __int64 n,p,r,rr,rp;
    39     while(scanf("%I64d",&n)!=EOF)
    40     {
    41         rr=N;rp=N;
    42         for(r=1;r<=40;r++)//只要到40就行了
    43         {
    44             p=fun(r,n);//中间放蜡烛
    45             if(p!=-1)
    46                 if(r*p < rr*rp || (r*p == rr*rp && r < rr))
    47                 {
    48                     rr=r;
    49                     rp=p;
    50                 }
    51             p=fun(r,n-1);//中间不放蜡烛
    52             if(p!=-1)
    53                 if(r*p < rr*rp || (r*p == rr*rp && r < rr))
    54                 {
    55                     rr=r;
    56                     rp=p;
    57                 }
    58         }
    59         printf("%I64d %I64d
    ",rr,rp);
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    Graphics—对话框操作
    Visual Studio 2013 出现error C4996(fopen函数出错)如何解决
    Visual Studio 2013出现错误LNK 2026(SAFESEH模块不兼容)如何解决
    Graphics—菜单设置笔记
    kali 根目录中文乱码
    sqlite文件损坏修复
    win10,mysql安装
    flask 对从数据库反向生成的表进行修改
    flask第一章:项目环境搭建
    flask 连接数据各种报错
  • 原文地址:https://www.cnblogs.com/tt123/p/3314126.html
Copyright © 2020-2023  润新知