题意:英语比较直接copy别人的
这道题也可以用枚举来做 想了一下比较难弄就推公式做了
题目意思就是小猫的帽子里面有n个小猫,高度为上一个小猫的1/(n+1),然后再依次n个...直到最后一个高度为1的为止。
题目给出第一个小猫的高度个最后高度为1的小猫个数,输出不工作的小猫的个数和小猫的总高度。
这个题就是数学公式:
设输入a和p,设每个小猫帽子里面有n个小猫,层数为k,则:
n^k=p
(n+1)^k=a
#include<cstdio>
#include<cmath>
#define eps 1e-8
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif // LOCAL
int H,work,N,i;
while(scanf("%d%d",&H,&work)!=EOF)
{
if(H ==0&&work==0)break;
double no_work = 1;
for(i = 1; ; i++)//整形最大是2的32次方-1
{
if((int)(pow(1+pow(work*1.0,1.0/i),i)+0.1)>=H)
break;
/*就改了这点就TLE变AC了 没搞懂*/
//double x = pow(work*1.0,1.0/i*1.0);
//if(fabs(x-(int)(x+0.5))<eps) {N = (int)(x+0.5);break;}
}
N = (int)(pow(work*1.0,1.0/i)+0.1);
long long sum = H;
for(i = 1; H!=1; i++)
{
no_work += pow(N,i);
H/=(N+1);
sum += H*pow(N,i);
}
no_work -= work;
printf("%.0lf %lld\n",no_work,sum);
}
return 0;
}