蓝桥杯 2022 省B 砍竹子

思路:

非常明显,这题是个贪心。因为这题是求最小操作次数,而且每次操作都会变小,所以肯定要优先操作大的元素,这样它变小之后才可能和其它元素一起操作以减少操作次数。

所以:建立两个数组,一个存竹子高度,一个存还能被砍的次数。读入完之后循环把序列中砍伐次数最大的竹子砍一次并记录砍伐次数。这里注意,区间修改的要求是相邻且高度相同,所以要判断砍伐次数最大的竹子是否相邻且高度相同,如果是那就一起砍了。

#include<iostream> 
#include<bits/stdc++.h> 
using namespace std;

// 定义一个函数 cuts,用于计算给定高度的切割次数
long long cuts(long long height)
{
    long long x = (long long)sqrt(height / 2 + 1); // 利用平方根函数求切割次数
    return x; // 返回切割次数
}

int main(){
    int n;
    cin >> n; // 输入待处理的木板数量

    long long heights[n]; // 定义一个长为 n 的数组,用于存储各个木板的高度
    vector<long long> cutnum(n, 0); // 定义一个长度为 n 的向量,用于存储各个木板的切割次数,初始值为 0
    long long cutmax = 0; // 记录切割次数的最大值,初始化为 0

    // 循环读入每块木板的高度,并计算其切割次数
    for(int i = 0; i < n; i++)
    {
        cin >> heights[i]; // 输入当前木板的高度
        long long a = heights[i]; // 记录当前木板的高度
        // 循环计算当前木板的切割次数,直到高度为 1 为止
        while(a > 1)
        {
            cutnum[i]++; // 增加当前木板的切割次数
            a = cuts(a); // 计算下一次切割后的木板高度
        }
        cutmax = max(cutmax, cutnum[i]); // 更新切割次数的最大值
    }

    int count = 0; // 计数变量,用于统计最终需要的切割次数

    // 从切割次数最大值开始向下遍历
    for(long long i = cutmax; i > 0; i--)
    {
        // 遍历每块木板
        for(int j = 0; j < n; j++)
        {
            // 如果当前木板的切割次数等于当前遍历的次数 i
            if(cutnum[j] == i)
            {
                // 如果当前木板的高度与下一块木板的高度不相等
                if(heights[j] != heights[j+1])
                    count++; // 增加切割计数
                cutnum[j]--; // 减少当前木板的切割次数
                heights[j] = cuts(heights[j]); // 更新当前木板的高度为切割后的高度
            }
        }
    }
    cout << count; // 输出最终切割次数
    return 0;
}

相关推荐

  1. 2022 B 洛谷 P8787 竹子

    2024-03-26 13:18:02       45 阅读
  2. [ 2022 B] 修剪灌木

    2024-03-26 13:18:02       39 阅读
  3. [ 2023 B] 冶炼金属

    2024-03-26 13:18:02       37 阅读
  4. [ 2023 B] 冶炼金属(c++)

    2024-03-26 13:18:02       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 13:18:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 13:18:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 13:18:02       87 阅读
  4. Python语言-面向对象

    2024-03-26 13:18:02       96 阅读

热门阅读

  1. mysql导出数据的几种形式

    2024-03-26 13:18:02       49 阅读
  2. django模板下,vue的使用(前后端不分离)

    2024-03-26 13:18:02       39 阅读
  3. springMVC的常见问题(面试题)问答

    2024-03-26 13:18:02       46 阅读
  4. 最小覆盖子串 - LeetCode 热题 12

    2024-03-26 13:18:02       38 阅读
  5. python项目练习——5.自动化批量重命名图片文件

    2024-03-26 13:18:02       37 阅读
  6. Web框架开发-基于Ajax实现的登录

    2024-03-26 13:18:02       43 阅读