加载中…
个人资料
jackchess
jackchess
  • 博客等级:
  • 博客积分:0
  • 博客访问:42,274
  • 关注人气:37
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

ZOJ-3665

(2012-10-14 20:51:46)
标签:

二分

分类: 数学
#include <stdio.h>
#include <math.h>
#define LL long long

LL n, r, k;
LL find(LL s, LL t, LL i)
{
    if(s > t) return 0;
    
    LL mid = (s+t)/2;

    int x;
    LL temp = mid;
    for(x = 1; x < i; ++x)
    {
        if(temp > n / mid) return find(s, mid-1, i);
        
        ++ temp;
        temp *= mid;
    }
    
    if(temp > n) return find(s, mid-1, i);
    if(temp < n) return find(mid+1, t, i);
    return mid;
}

int main(void)
{
    int i, j;

    while(scanf("%lld", &n) != EOF)
    {
        k = n-1;
        r = 1;
        
        for(i = 2; i < 40; ++i)
        {
            LL t = find(2, n, i);
            if(t == 0) continue;
            if(i * t < r * k || (i * t == r * k && i < r) )
            {
                r = i;
                k = t;
            }
        }

        -- n;
        for(i = 2; i < 40; ++i)
        {
            LL t = find(2, n, i);
            if(t == 0) continue;
            if(i * t < r * k || (i * t == r * k && i < r) )
            {
                r = i;
                k = t;
            }
        }
        printf("%lld %lld\n", r, k);
    }
    return 0;
}

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
前一篇:ZOJ-1400
后一篇:ZOJ-1431
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    < 前一篇ZOJ-1400
    后一篇 >ZOJ-1431
      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有