砍竹子(20%测试数据)
假设这一段竹子的高度为 H,那么使用一次魔法可以
把这一段竹子的高度都变为 floor(sqrt(floor(H/2)+1)),其中 ⌊x⌋ 表示对 x 向下取
可以用函数floor 进行取整
然后就可以用暴力求解的方法进行运输
#include<iostream>
#include<math.h>
using namespace std;
const int N = 3e5;//定义数组大小
int a[N], n;
int max1()//这个函数返回数组中的最大值
{
int res = 0;
for (int i = 1; i <= n; i++)
res = max(res, a[i]);
return res;
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
int H = max1(), res = 0, count=0;
while (H != 1)
{
for (int i = 1; i <= n; i++)
{
if (a[i] == H)
{
res++;
while (a[i] == H)
a[i] = floor(sqrt(floor(H / 2)+ 1)), count++,i++;
}
if (count != 0) break;
}
count = 0;
H = max1();
}
cout << res << endl;
return 0;
}