蓝桥杯第2117题 砍竹子 c++ 困难 模拟 题解简单秒杀 + 注释
题目
思路和解题方法
#include <iostream>
是包含输入输出流的头文件。#include <cmath>
是包含数学函数的头文件。接下来是程序的主要部分:
- 定义了一个类型别名
LL
,表示long long
类型。- 声明了数组
a
和p
,用于存储数据。- 在
main
函数中,首先读取输入的整数n
。- 使用循环读取
n
个数并存储到数组a
中。同时,通过计算每个数的平方根(使用了sqrtl
函数)并统计平方根的次数,将结果存储到数组p
中,并找出最大的次数max1
。- 初始化变量
ans
为0,并在数组p
的最后添加一个元素0。- 使用两个嵌套的循环,从最大次数
max1
开始递减,依次遍历数组p
和数组a
。
- 如果当前元素
p[j]
不等于当前次数i
,则跳过本次循环。- 如果数组
a
中相邻的两个数相等,则不进行任何操作。- 否则,将
ans
加1,将p[j]
减1,将数组a
中的元素按照一定的计算方式更新为其平方根。- 打印输出最终的结果
ans
。
复杂度
时间复杂度:
O(n^2)
- 外层循环对 n 个元素进行遍历,时间复杂度为 O(n)。
- 内层嵌套循环的时间复杂度需要根据具体情况来分析,因为它的时间复杂度依赖于 max1 的值和数组中元素的分布情况。
时间复杂度介于 O(n) 和 O(n^2) 之间,具体取决于 max1 的值和数组中元素的分布情况。
空间复杂度
O(n)
空间复杂度,主要是由数组 a、p 和临时变量 t 所占用的空间,因此空间复杂度为 O(n)。
c++ 代码
#include <iostream>
#include <cmath>
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<n;j++) // 遍历数组 p
{
if(p[j]!=i) continue; // 如果 p[j] 不等于 i,跳过本次循环
if(a[j]==a[j+1]); // 如果 a[j] 等于 a[j+1],什么也不做
else ans++; // 否则,ans 加 1
p[j]--; // p[j] 减 1
a[j] = sqrtl((a[j]/2)+1); // 计算 a[j] 的平方根并赋值给 a[j]
}
}
cout<<ans<<endl; // 输出 ans
return 0;
}
觉得有用的话可以点点赞,支持一下。
如果愿意的话关注一下。会对你有更多的帮助。
每天都会不定时更新哦 >人< 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)