hdu4430

来源:互联网 发布:网络与新媒体概论 pdf 编辑:程序博客网 时间:2024/04/30 22:15
/*
分析:
    长春区赛的水题(2012),枚举+二分。
    网上有各种神牛的解释,菜鸟就不废话了,囧~~~


                                        2012-10-23
*/
















#include"stdio.h"#include"string.h"#include"stdlib.h"#include"math.h"__int64 n;__int64 Z(__int64 x,__int64 k){    __int64 i;    __int64 t;    t=x;    for(i=2;i<=k;i++)   x*=t;    return x;}int main(){    __int64 i;    __int64 r_ans,k_ans,cop;    __int64 low,up,mid;    __int64 t,temp;    while(scanf("%I64d",&n)!=-1)    {r_ans=1;k_ans=cop=n-1;        for(i=2;i<=40;i++)        {            low=2;up=pow(n,1.0/i);                //想不明白,我对这个右边界做了更好的优化,结果WA,去掉那个优化用这个,AC。。。while(low<=up)            {                mid=(low+up)>>1;                temp=Z(mid,i);                temp--;                temp*=mid;                if(temp<n*(mid-1))low=mid+1;                elseup=mid-1;            }temp=Z(low,i);temp--;temp*=low;            if(temp==n*(low-1))            {                t=i*low;                if(t<cop){cop=t;r_ans=i;k_ans=low;}                else if(t==cop && r_ans>i)  {r_ans=i;k_ans=low;}            }        }n--;        for(i=2;i<=40;i++)        {            low=2;up=pow(n,1.0/i);while(low<=up)            {                mid=(low+up)>>1;                temp=Z(mid,i);                temp--;                temp*=mid;                if(temp<n*(mid-1))low=mid+1;                elseup=mid-1;            }temp=Z(low,i);temp--;temp*=low;            if(temp==n*(low-1))            {                t=i*low;                if(t<cop){cop=t;r_ans=i;k_ans=low;}                else if(t==cop && r_ans>i)  {r_ans=i;k_ans=low;}            }        }        printf("%I64d %I64d\n",r_ans,k_ans);    }    return 0;}