当前位置:首页 > 蓝桥杯 > 2024蓝桥杯国赛B组最小字符串题解:贪心算法实战应用(洛谷P10910代码解析)

2024蓝桥杯国赛B组最小字符串题解:贪心算法实战应用(洛谷P10910代码解析)

3个月前 (07-01)

2024蓝桥杯国赛B组最小字符串题解:贪心算法实战应用(洛谷P10910代码解析)  最小字符串 贪心算法 第1张


一、题目解读

题目要求给定一个长度为N的字符串S和M个待插入字符,通过将这些字符全部插入S中,构造出字典序最小的新字符串。这是典型的字符串构造问题,考察选手对贪心算法的理解和应用能力。

二、解题思路

采用贪心算法策略:

    1.先将待插入字符排序,便于按字典序选择

    2.遍历原字符串时,在保证字典序最小的位置插入当前最小的可用字符

    3.最后处理剩余未插入字符

三、解题步骤

    1.输入处理:读取N,M,S和字符集

    2.字符排序:预处理待插入字符

    3.双指针遍历:比较原字符与待插入字符

    4.结果构造:按贪心策略构建结果字符串

    5.剩余处理:追加剩余字符

四、完整代码与注释

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    int N, M;
    string S, chars;
    
    // 读取输入
    cin >> N >> M;
    cin >> S;
    cin >> chars;
    
    // 将待插入字符排序,方便贪心选择
    sort(chars.begin(), chars.end());
    
    string result;
    int charIndex = 0;
    
    // 贪心策略:在能保持字典序最小的位置插入当前最小字符
    for (int i = 0; i < N; ++i) {
        // 当还有字符可插入,且当前字符比待插入字符大时
        while (charIndex < M && chars[charIndex] < S[i]) {
            result.push_back(chars[charIndex]);
            charIndex++;
        }
        result.push_back(S[i]);
    }
    
    // 插入剩余字符
    while (charIndex < M) {
        result.push_back(chars[charIndex]);
        charIndex++;
    }
    
    cout << result << endl;
    return 0;
}

五、总结

本题通过贪心算法有效解决了最小字符串构造问题,关键在于预处理字符排序和适时插入的策略。算法时间复杂度为O(MlogM + N),主要消耗在排序环节,整体效率较高。

原创内容 转载请注明出处

分享给朋友:

相关文章

【牛客13256题解析】贪心算法优化题目组合问题:三元组与二元组的解题思路

【牛客13256题解析】贪心算法优化题目组合问题:三元组与二元组的解题思路

一、题目解读牛客13256题要求处理一组题目难度数据,通过组合三元组(难度差≤20)或二元组(难度差≤10)来重新编排题目,计算需要补充的最小题目数量。题目本质是资源分配与优化问题,需高效组合现有题目...

力扣LCR074题区间合并算法解析:贪心排序与区间重叠处理

力扣LCR074题区间合并算法解析:贪心排序与区间重叠处理

一、题目解读力扣LCR074题要求对给定的二维区间数组(每个区间由起始点和终止点构成)进行合并,将重叠的区间合并为更宽的区间,最终输出不重叠的合并结果。例如,输入[[1,3],[2,6],[8,10]...

力扣1643题:第K小字典序路径(附C++代码与解题思路)

力扣1643题:第K小字典序路径(附C++代码与解题思路)

一、题目解读本题要求生成从原点(0, 0)到目标坐标(destination[0], destination[1])的路径中,字典序第K小的路径。路径仅由向下字符'V'(代表垂直移动)...

洛谷P3817题解:基于贪心算法的糖果分配优化策略

洛谷P3817题解:基于贪心算法的糖果分配优化策略

一、题目解读洛谷P3817题目要求处理n个盒子中的糖果分配问题:给定每个盒子的糖果数a[i]及限制值x,需通过吃掉部分糖果,确保任意相邻盒子(a[i-1] + a[i])的总和不超过x。输出最小需吃掉...

力扣765题:情侣牵手问题的贪心解法

力扣765题:情侣牵手问题的贪心解法

一、题目解读力扣765题要求在一个座位数组中,每对情侣需相邻而坐。给定n对情侣的初始座位安排(偶数长度数组),需通过最小次数的交换操作,使所有情侣成为相邻座位。二、贪心算法完整代码class ...

洛谷1293题解析:加权中位数城市选址问题的C++解法

洛谷1293题解析:加权中位数城市选址问题的C++解法

一、题目解读洛谷1293题要求解决一个城市选址问题:给定多个城市的学生人数与到莫斯科的距离,需找到一个城市作为中心点,使得所有学生到该中心的加权距离之和最小。题目输入包含城市名称、学生数和到莫斯科的单...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。