砍竹子(蓝桥杯 2022 省赛 B 组 J 题)

简介: 砍竹子(蓝桥杯 2022 省赛 B 组 J 题)

AC代码:

#include<iostream>
#include<queue>
#include<math.h>
using namespace std;
long long res;
struct node
{
  long long val,l, r;
};
bool operator <(node a, node b)
{
  return a.val == b.val ? a.l < b.l : a.val < b.val;//定义调堆的规则,如果值相等的情况下,优先考虑左区间大的
}
int main(void)
{
  long long n, k;
  priority_queue<node>p;//定义一个node类型的堆
  scanf("%lld", &n);
  for (int i = 1; i <= n; i++)
  {
    scanf("%lld", &k);
    p.push({ k,i,i });
  }
  while (p.top().val != 1)
  {
    node t = p.top();//取出当前的堆顶元素(最大值)
    p.pop();//先将最大值出堆,等砍掉之后还会将高度重新入堆
    node top;//用于等会记录堆中第二大的值
    while (!p.empty())
    {
      top = p.top();//堆中第二大的值
      if (t.val == top.val && t.l - 1 == top.r)//如果最大值和第二大的值相等,并且区间差只有1,就是相邻的竹子
      {
        p.pop();//一起砍掉,就是先pop掉第二大的,所有相等的且相邻的只用保留一个数就行了,当这个数被砍为1的时候相当于所有相邻的都被砍为1了
        t.l = top.l;//相当于合并区间了
      }
      else
      {
        break;//如果没有可以一并砍掉的就直接跳出循环
      }
    }
    int val = sqrtl(t.val / 2 + 1);//计算
    p.push({ val,t.l,t.r });//将砍了之后的高度加入堆中
    res++;//砍的次数+1
  }
  printf("%lld", res);
  return 0;
}


目录
相关文章
|
机器学习/深度学习 监控 Python
tensorflow2.x多层感知机模型参数量和计算量的统计
tensorflow2.x多层感知机模型参数量和计算量的统计
378 0
|
4月前
|
运维 数据可视化 数据挖掘
生产现场巡检怎么做才有效?一线点检、异常上报、统计报表的最佳实践
本文介绍了如何通过草料二维码构建轻量、易用且闭环的巡检机制。针对巡检员、维保人员和管理员三类角色,分别阐述了扫码点检、异常即时上报与自动提醒、任务监督与数据分析的具体实现方式,助力企业提升巡检效率与执行效果,实现设备管理的透明化与智能化。
|
弹性计算 网络安全 数据安全/隐私保护
如何将本地文件上传至阿里云ECS中
利用WinSCP与云服务器ECS实现文件互通
17619 1
中缀表达式转后缀表达式(逆波兰式)
中缀表达式转后缀表达式(逆波兰式)
1178 0
|
消息中间件 存储 API
|
算法 索引 容器
双指针算法详解
本文介绍了双指针算法及其应用。双指针算法是在数组或字符串中常用的高效技术,通过维护两个指针遍历数据结构以解决特定问题。根据指针移动方向,可分为同向双指针、相向双指针和快慢指针。同向双指针如移动零和复写零问题;快慢指针如快乐数问题;相向双指针如盛水最多的容器、有效三角形数量及多数之和等问题。通过合理运用双指针技巧,可简化代码并提高效率。
294 4
双指针算法详解
|
SQL 存储 数据库
SQL语句是否都需要解析及其相关技巧与方法
在数据库管理系统中,SQL(Structured Query Language)语句作为与数据库交互的桥梁,其执行过程往往涉及到一个或多个解析阶段
|
运维 监控
"网络工程师必备秘籍:4大招轻松破解M-LAG故障难题,你的网络还能更稳定!"
【8月更文挑战第19天】M-LAG技术通过多链路聚合提升网络可靠性和带宽。面对M-LAG故障,四步定位法助您迅速排障:1) 检查M-LAG成员状态确保链路活动;2) 验证链路聚合配置一致;3) 分析控制和平面与数据平面状态;4) 排除物理层故障如端口状态异常。结合网络监控和定期检查,保障M-LAG稳定运行。
561 0
|
机器学习/深度学习 人工智能 自然语言处理