UVa 107 - The Cat in the Hat

来源:互联网 发布:宣传折页设计软件 编辑:程序博客网 时间:2024/04/29 15:52

题目:有一只高度为h的猫,头上戴了一个帽子,帽子里有n只更小的猫,每只高h/(n+1);

            每只小猫的头上也有帽子每只也有n只更小的猫,每只高h/(n+1)/(n+1),...;

            最终到达猫的高度为1时终止。现在给你最开始的猫的高度(h)和高度为1的猫的数量(m);

            求有多少高度大于1的猫,以及所有猫的高度和。

分析:数学题。根据题意可以列出下列等式:

            (a)h = (n+1)^ k;(b)m = n ^ k;

            整理得:(c)k = log(h)/ log(n+1)= log(m)/ log(n);

            (c)构成了n的方程(d)f(n)= log(n+1)* log(m)- log(n)* log(h)= 0;

            对(d)求导,导数< 0 ,可知f(n)递减,所以二分求解即可。

说明:注意分子为0,以及log的参数为1的情况。

#include <iostream>#include <cstdlib>#include <cstdio>#include <cmath>using namespace std;double bs( double h, double m ){double mid,l = 1.0,r = 1e100;while ( (r-l) > 1e-10 ) {mid = (l+r)/2.0;if ( log(mid+1)*log(m) > log(mid)*log(h) )l = mid;else r = mid;}return r;}int main(){double h,m,n,k,u;while ( cin >> h >> m && h ) {n = bs( h, m );k = log(h)/log(n+1);if ( fabs(n-1) > 1e-10 )u = (m-1)/(n-1);else u = k;printf("%.0lf %.0lf\n",u,h*(n+1)*(1-pow(n/(n+1),k+1)));}return 0;}

0 0
原创粉丝点击