蓝桥杯第2117题 砍竹子 c++ 困难 模拟 题解简单秒杀 + 注释

题目

砍竹子 - 蓝桥云课 (lanqiao.cn)

蓝桥杯第2117题 砍竹子 c++ 困难 模拟 题解简单秒杀 + 注释_第1张图片

蓝桥杯第2117题 砍竹子 c++ 困难 模拟 题解简单秒杀 + 注释_第2张图片

思路和解题方法

  1. #include  是包含输入输出流的头文件。
  2. #include  是包含数学函数的头文件。

接下来是程序的主要部分:

  1. 定义了一个类型别名 LL,表示 long long 类型。
  2. 声明了数组 a 和 p,用于存储数据。
  3. 在 main 函数中,首先读取输入的整数 n
  4. 使用循环读取 n 个数并存储到数组 a 中。同时,通过计算每个数的平方根(使用了 sqrtl 函数)并统计平方根的次数,将结果存储到数组 p 中,并找出最大的次数 max1
  5. 初始化变量 ans 为0,并在数组 p 的最后添加一个元素0。
  6. 使用两个嵌套的循环,从最大次数 max1 开始递减,依次遍历数组 p 和数组 a
    • 如果当前元素 p[j] 不等于当前次数 i,则跳过本次循环。
    • 如果数组 a 中相邻的两个数相等,则不进行任何操作。
    • 否则,将 ans 加1,将 p[j] 减1,将数组 a 中的元素按照一定的计算方式更新为其平方根。
  7. 打印输出最终的结果 ans

复杂度

        时间复杂度:

                O(n^2)

  1. 外层循环对 n 个元素进行遍历,时间复杂度为 O(n)。
  2. 内层嵌套循环的时间复杂度需要根据具体情况来分析,因为它的时间复杂度依赖于 max1 的值和数组中元素的分布情况。

时间复杂度介于 O(n) 和 O(n^2) 之间,具体取决于 max1 的值和数组中元素的分布情况。

        空间复杂度

                O(n)

        空间复杂度,主要是由数组 a、p 和临时变量 t 所占用的空间,因此空间复杂度为 O(n)。

c++ 代码

#include 
#include 

using namespace std;

typedef long long LL; // 定义 long long 类型的别名 LL
LL a[200010]; // 定义长整型数组 a,大小为 200010
int p[200010]; // 定义整型数组 p,大小为 200010

int main()
{
  int n ; // 声明整数变量 n
  scanf("%d",&n); // 读取输入的整数 n

  int max1 = 0; // 声明并初始化 max1 为 0
  for(int i = 0 ;i< n ;i++) // 循环读入 n 个数
  {
      scanf("%lld",&a[i]); // 读取长整型数并存入数组 a
      LL t = a[i]; // 将 a[i] 赋值给临时变量 t
      while(t!=1){ // 当 t 不等于 1 时进行循环
          p[i]++; // 对应位置的 p 值加 1
          t = sqrtl((t/2)+1); // 计算 t 的平方根并赋值给 t
      }
      max1 = max(p[i],max1); // 更新 max1 为 p[i] 和 max1 中的较大值
  }

  int ans = 0; // 声明并初始化 ans 为 0
  p[n] = 0; // 将 p[n] 设置为 0
  for(int i = max1;i>0;i--) // 从 max1 到 1 进行循环
  {
      for(int j = 0;j

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

你可能感兴趣的:(蓝桥杯,模拟,数据结构,蓝桥杯,c++,算法,模拟)