设为首页 加入收藏

TOP

hdu 4430 Yukari's Birthday 枚举(二)
2012-11-28 12:59:04 来源: 作者: 【 】 浏览:824
Tags:hdu  4430  Yukari' Birthday  枚举

 

    枚举r,然后用二分来求对应的k.

    因为题目上k>=2,所以r肯定不会很大,二分就可以了.

    需要注意的是二分时初始右边界不能太大,不然会导致计算过程超出long long

    还有就是提交时输入输出在zoj上要要用%lld,而hdu要用%I64d,不然会Wrong Answer

    代码:

    [cpp]

    #include<stdio.h>

    #include<string.h>

    #include<stdlib.h>

    #include<math.h>

    long long powLL(long long a,int b){

    long long res=1;

    for(int i=0;i<b;i++)

    res*=a;

    return res;

    }

    int main(void){

    long long n,r,k;

    while(scanf(“%lld”,&n)!=EOF){

    r=1;

    k=n-1;

    for(int i=2;i<=45;i++){

    long long ll,rr,mm;

    ll=2;

    rr=(long long)pow(n,1.0/i);

    while(ll<=rr){

    mm=(long long)(ll+rr)/2;

    long long ans=(mm-powLL(mm,i+1))/(1-mm);

    if(ans==n||ans==n-1){

    if(i*mm<r*k){

    r=i;

    k=mm;

    }

    break;

    }

    else if(ans>n){

    rr=mm-1;

    }

    else {

    ll=mm+1;

    }

    }

    }

    printf(“%lld %lld\n”,r,k);

    }

    return 0;

    }

      

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++使用wkhtmltopdf的API的配置 下一篇面试:实现内存复制函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: