O(n) 从后往前递推一遍
根据题目, 我们得到的公式是: $E’ = 2E - H(k+1)$
先假设到达最后是0能量, 然后往前推: $E = \frac{E’ + H(k+1)}{2}$ , 将结果储存在res[]数组中
保留计算得到小数, 直到第0位置
判断 res[0] 是否 是一个整数:
- 如果是, 即为答案, 输出
- 如果不是, 向上取整, 输出
#include<iostream>
#include<cstdio>
#define N 100010
#define EOF 1e-5
using namespace std;
int n;
int h[N];
double res[N];
int main(){
cin>>n;
for(int i=1; i<=n; i++)
scanf("%d", &h[i]);
for(int i=n-1; i>=0; i--){
res[i] = (res[i+1] + h[i+1]) / 2;
}
if(res[0]-(int)res[0]>EOF){
cout<<(int)res[0]+1;
}else{
cout<<(int)res[0];
}
return 0;
}
参考了大佬的思路,简化了向上取整的步骤,除数是x,只要在被除数上加上x-1,就能达到向上取整的效果。
这个代码和chatgpt给出的解法完全一样,秀!
chatGPT能写这个???
向上取整a/b = 向下取整(a+b-1)/a 是吗
是的,复制题干提问他就可以写
orz
牛逼
tql
哇,这思路棒极了
tql
tql
hao