题解:P10320 勇气(Courage)
wangbinfeng
·
2024-04-06 07:22:06
·
题解
由于除了第一次强化外每次都要衰变,可以想到如果初始值翻倍且第一次强化也要衰变,则对结果没有影响。具体地,令 y=2x ,强化次数为 k\left(k\in\R^*\right) 。
设第 k 次强化后攻击力为 f\left(k\right)=\dfrac{y^{b_k}}{2^{a_k}}=\left(\dfrac{f\left(k-1\right)}{2}\right)^2=\dfrac{y^{2b_{k-1}}}{2^{2+2a_{k-1}}}=\dfrac{y^{2^k}}{2^{2^{\left(k+1\right)}-2}} 。
则题目可转化为 f\left(k\right)=\dfrac{y^{2^k}}{2^{2^{\left(k+1\right)}-2}}\ge 2^n 。
由数学知识可知:
\begin{aligned}
&\begin{aligned}
\text{原不等式}
&\implies \log_2\left(\dfrac{y^{2^k}}{2^{2^{\left(k+1\right)}-2}}\right)\ge n\\
&\implies \log_2 y^{2^k}-\log_2 2^{2^{\left(k+1\right)-2}}\ge n\\
&\implies \log_2 y^{2^k}-2^{k+1}+2\ge n\\
&\implies 2^k\log_2 y^-2^{k+1}\ge n-2\\
&\implies \log_2 y-2\ge \dfrac{n-2}{2^k}\\
&\implies \dfrac{\log_2 y-2}{n-2}\ge \dfrac{1}{2^k}\\
&\implies \dfrac{n-2}{\log_2 y-2}\le 2^k\\
&\implies k\ge\log_2\dfrac{n-2}{\log_2 y-2}
\end{aligned}
\\
&\begin{aligned}
& \because \mathrm{ans}\in\N^*\\
& \therefore \mathrm{ans}=\lceil k\rceil\\
& \therefore \mathrm{ans}=\lceil \log_2\dfrac{n-2}{\log_2 y-2}\rceil\\
& \therefore \mathrm{ans}=\lceil \log_2\dfrac{n-2}{\log_2 2x-2}\rceil
\end{aligned}
\end{aligned}
代码如下:
#include<bits/stdc++.h>
using namespace std;
double n,x,y;
signed main(){
cin>>x>>n;
if(x==2 && n>2){cout<<"inf";return 0;}
else if(x==2 && n==2){cout<<1;return 0;}
else if(n==1){cout<<0;return 0;}
cout<<static_cast<int>(ceil(log2((n-2.0)/(log2(x*2)-2))));
return 0;
}