1 条题解

  • 0
    @ 2025-5-9 0:37:45

    解题思路如下:

    1. 确定 NN:由 m=Nkm = N^k(干活猫数量)和 h=(N+1)kh = (N + 1)^k(最初猫高度),对两式取对数得 $\frac{\log h}{\log m} = \frac{\log (N + 1)}{\log N}$,通过循环尝试不同 NN 值,使该等式在给定精度(如 101010^{-10})内成立。
    2. 计算层数 kk:利用 k=loghlog(N+1)k = \frac{\log h}{\log (N + 1)} 计算,结果四舍五入取整。
    3. 计算不干活的猫数量
      • N=1N = 1,不干活的猫数量为 00(因每一层仅 11 只猫,最小猫干活,无其他猫)。
      • N1N \neq 1,利用等比数列求和公式,不干活的猫数量为 Nk1N11\frac{N^k - 1}{N - 1} - 1(总猫数减 11,除去最小猫层)。
    4. 计算总高度:根据等比数列求和,总高度为 $(N + 1)h\left(1 - \left(\frac{N}{N + 1}\right)^{k + 1}\right)$,其中 h=(N+1)kh = (N + 1)^k,代入化简后计算。

    通过以上步骤,可求解不干活的猫的数量及所有猫的高度总和。

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const double eps=1e-10;
    
    int h,m;
    
    double n,k;
    
    int main()
    {
    
    	while(cin>>h>>m)
    	{
    		if(h==0&&m==0)
    		{
    			break;
    		}
    		
    		n=1.0;
    		
    		while(fabs( log(n)/log(m) - log(n+1)/log(h) )>=eps) 
    		{
    			n++;
    		}
    		
    		k=int (log(h) / log(n+1)+0.5);
    		
    		if((int) n==1)
    		{
    			cout<<k<<" "; 
    		}
    		else 
    		{
    			cout<<int (0.5+(1-pow(n,k))/(1-n))<<" ";
    		}
    		
    		cout<<int (0.5+(1-pow(n/(n+1),k+1))*(n+1)*h)<<"\n";
    	}
    	
    	return 0;
    }
    • 1

    信息

    ID
    290
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    17
    已通过
    1
    上传者