P10320 勇气(Courage)
推导过程
本题是一道数学题,重点是如何推导出正确式子。
首先,先特判几个特殊点:
-
当 \(n>=2\) 且 \(x=2\) 时,是不存在解的,战斗力无论何时都不会超过 \(2^{n}\)。
-
当 \(x\) 不强化就以大于 \(2^{n}\)。
-
当 \(x\) 第一次强化达到 \(x^{2}\) 时,大于 \(2^{n}\)。
现在开始推导公式。
先将 \(x\) 不强化到 \(x\) 强化完第五次列举了下来。
$ x,x^{2}, \frac{x{4}}{2{2}},\frac{x{8}}{2{6}},\frac{x{16}}{2{14}},\frac{x{32}}{2{30}},\cdots $
我们就会发现当 \(x>=1\) 时,\(ans_{k}=\frac{x^{2^{k}}}{2^{2^{k}-2}}\)
通过高中的 log 知识,我们可以将这个式子化简为 $ans_{k}=\log_{2}{\frac{n-2}{\log_{2}{x} -1} } $
注意式子要向上取整。
#include<bits/stdc++.h>
using namespace std;
double n,x;
long long g=1,h,k=0;
const int mod=11;
int main() {
cin>>x>>n;
if(x>=pow(2,n)) {
cout<<0;
return 0;
}
if(x*x>=pow(2,n)) {
cout<<1;
return 0;
}
if(x==2&&n>=2) {
cout<<"inf";
return 0;
}
cout<<ceil(logl((n - 2) / (logl(x) / logl(2) - 1.0)) / logl(2));
return 0;
}
求赞。