第十四届蓝桥杯编程题部分代码题解

这篇具有很好参考价值的文章主要介绍了第十四届蓝桥杯编程题部分代码题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C. 冶炼金属

最大值就是取 a / b a / b a/b 的最小值,最小值就是二分找到满足 m i d ∗ ( b i + 1 ) ≥ a i mid * (b_i + 1) ≥ a_i mid(bi+1)ai 的最小值

#include<bits/stdc++.h>
#define int long long
#define x first
#define y second
using namespace std;

void solve()
{
    int n;
    cin >> n;
    vector<pair<int, int>> a(n);
    for (int i = 0; i < n; i++) cin >> a[i].x >> a[i].y;
    int l = 0, r = 1e9;
    auto check = [&](int mid)
    {
        for (int i = 0; i < n; i++)
            if (mid * (a[i].y + 1) <= a[i].x) return false;
        return true;
    };
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;
        else l = mid + 1;
    }
    cout << l << ' ';
    int minn = 1e9;
    for (int i = 0; i < n; i++)
        minn = min(minn, a[i].x / a[i].y);
    cout << minn << '\n';
}

signed main()
{
    // freopen("Sample.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T = 1;
    // cin >> T;
    while (T--) solve();
    // cout << "Time:" << (double)clock() / 1000 << '\n';
    return 0;
}

D. 飞机降落

全排列枚举所有降落方案,然后判断即可

#include<bits/stdc++.h>
#define int long long
#define x first
#define y second
using namespace std;

void solve()
{
    int n;
    cin >> n;
    vector<int> t(n + 10), d(n + 10), l(n + 10);
    for (int i = 0; i < n; i++) cin >> t[i] >> d[i] >> l[i];
    vector<int> p(n);
    for (int i = 0; i < n; i++) p[i] = i;
    do {
        int tt = 0;
        bool flag = true;
        for (int i = 0; i < n; i++)
        {
            int x = p[i];
            if (tt > t[x] + d[x])
            {
                flag = false;
                break;
            }
            tt = max(tt, t[x]);
            tt += l[x];
        }
        if (flag) 
        {
            cout << "YES" << '\n';
            return;
        }
    } while (next_permutation(p.begin(), p.end()));
    cout << "NO" << '\n';
}

signed main()
{
    // freopen("Sample.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T = 1;
    cin >> T;
    while (T--) solve();
    // cout << "Time:" << (double)clock() / 1000 << '\n';
    return 0;
}

E. 接龙数列

状态定义: f [ i , j ] f[i, j] f[i,j] 为前 i i i 个数,以 j j j 结尾的最长合法子序列,答案就是 n − m a x n - max nmax

#include<bits/stdc++.h>
#define int long long
#define x first
#define y second
using namespace std;

void solve()
{
    int n;
    cin >> n;
    map<int, int> mp;
    vector<int> a(n);
    vector<pair<int, int>> b(n);
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++)
    {
        b[i].y = a[i] % 10;
        int x = a[i];
        while (x >= 10) x /= 10;
        b[i].x = x;
    }
    int ans = 0;
    for (int i = 0; i < n; i++)
    {
        int x = mp[b[i].x];
        mp[b[i].y] = max(mp[b[i].y], x + 1);
        ans = max(ans, mp[b[i].y]);
    }
    cout << n - ans << '\n';
}

signed main()
{
    // freopen("Sample.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T = 1;
    // cin >> T;
    while (T--) solve();
    // cout << "Time:" << (double)clock() / 1000 << '\n';
    return 0;
}

F. 岛屿个数

考场上没什么思路,随便写了个Flood Fill就润了

G. 字串简写

处理 b b b 的前缀和,然后扫一遍即可

#include<bits/stdc++.h>
#define int long long
#define x first
#define y second
using namespace std;

void solve()
{
    int k;
    cin >> k;
    string s;
    char a, b;
    cin >> s >> a >> b;
    int n = s.size();
    s = " " + s;
    vector<int> B(n + 10);
    for (int i = 1; i <= n; i++)
        if (s[i] == b) B[i] ++;
    for (int i = 1; i <= n; i++) B[i] += B[i - 1];
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        if (s[i] == a)
        {
            if (i + k - 1 > n) continue;
            ans += B[n] - B[i + k - 2];
        }
    }
    cout << ans << '\n';
}

signed main()
{
    // freopen("Sample.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T = 1;
    // cin >> T;
    while (T--) solve();
    // cout << "Time:" << (double)clock() / 1000 << '\n';
    return 0;
}

H. 整数删除

首先初始化下每个数的前驱和后继

开一个小根堆,把所有数的大小和位置都放进去

每次循环,拿到数组中最小的数,标记上位置,然后操作它和它的前驱后继

但是可能拿到的数,已经被改变过了,所以我们需要开一个 m a p map map ,记录下每个位置被改变过多少次

最后把没有被标记的数输出即可

#include<bits/stdc++.h>
#define int long long
#define x first
#define y second
using namespace std;

void solve()
{
    int n, k;
    cin >> n >> k;
    vector<int> a(n + 10);
    for (int i = 1; i <= n; i++) cin >> a[i];
    vector<pair<int, int>> b(n + 10);
    for (int i = 1; i <= n; i++) b[i] = {i - 1, i + 1};
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> heap;
    for (int i = 1; i <= n; i++) heap.push({a[i], i});
    map<int, int> mp;
    vector<bool> st(n + 10);
    for (int i = 0; i < k; i++)
    {
        while (mp[heap.top().y])
        {
            mp[heap.top().y] --;
            heap.pop();
        }
        auto t = heap.top();
        heap.pop();
        st[t.y] = true;
        int l = b[t.y].x, r = b[t.y].y;
        b[l].y = r, b[r].x = l;
        a[l] += t.x, a[r] += t.x;
        mp[l] ++, mp[r] ++;
        if (l) heap.push({a[l], l});
        if (r <= n) heap.push({a[r], r});
    }
    for (int i = 1; i <= n; i++)
        if (!st[i]) cout << a[i] << ' ';
}

signed main()
{
    // freopen("Sample.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T = 1;
    // cin >> T;
    while (T--) solve();
    // cout << "Time:" << (double)clock() / 1000 << '\n';
    return 0;
}

写在最后

剩下两题都是LCA好像,不太会,导游暴力Floyd骗分,最后一题没读完题,输出样例后就选择去检查了,上述几题都过了民间数据了,应该问题不大,很好啊,好像省一稳了?噢,原来有人赛时没开long long没关同步流啊,为什么没呢?很简单啊,怕过不了编译,然后就真忘了,我是傻逼文章来源地址https://www.toymoban.com/news/detail-410422.html

到了这里,关于第十四届蓝桥杯编程题部分代码题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023第十四届蓝桥杯Java B组个人题解

    欢迎大家阅读蓝桥杯文章专栏🍄🍄 🔥 2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现 ) 🔥 2023第十四届蓝桥杯模拟赛第三期个人题解(Java实现 ) 🔥 蓝桥杯备赛之动态规划篇——背包问题 🔥 蓝桥杯备赛之动态规划篇——涂色问题(区间DP) 🔥 蓝桥杯真题——单词

    2023年04月15日
    浏览(27)
  • 第十四届蓝桥杯省赛C++ B组(个人经历 + 题解)

    这是我第一次参加蓝桥杯的省赛,虽然没什么参赛经验,但是自己做了很多前几届蓝桥杯的题,不得不说,这一届蓝桥杯省赛的难度相较于之前而言还是比较大的。之前很流行蓝桥杯就是暴力杯的说法,但是随着参赛人数的增多,比赛认可度的提升,比赛题目的质量也明显越

    2024年02月03日
    浏览(26)
  • 2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现)

    2023第十四届蓝桥杯校内模拟赛第三期个人题解(Java实现) 蓝桥杯真题——单词分析(Java实现) 这篇文章为个人题解,假如我写的解法有误,欢迎大家在评论区指正👏👏!!!希望这篇文章对你有帮助❤❤ 请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的

    2023年04月23日
    浏览(23)
  • 2023第十四届蓝桥杯C/C++B组省赛题解

    题目描述 【问题描述】 小蓝现在有一个长度为100 的数组,数组中的每个元素的值都在0 到9 的范围之内。数组中的元素从左至右如下所示: 现在他想要从这个数组中寻找一些满足以下条件的子序列: 子序列的长度为8; 这个子序列可以按照下标顺序组成一个yyyymmdd 格式的日

    2024年02月04日
    浏览(24)
  • 第十四届蓝桥杯省赛c/c++大学B组题解

    个人答案,有错漏感谢指正哈 本题总分:5 分 【问题描述】   小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的范围之内。数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3

    2023年04月12日
    浏览(38)
  • 蓝桥杯第十四届省赛完整题解 C/C++ B组

    没有测评,不知道对不对,仅仅过样例而已 本题总分:5 分 【问题描述】 小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的 范围之内。数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9

    2023年04月13日
    浏览(31)
  • 第十四届蓝桥杯大赛软件赛省赛 Java 大学 B 组题解

    找规律,可以先手动模拟几次,会发现 随着n越大,零也越多,当n为40的时候刚好有9个0 所以到40项以后的末尾9个阶乘的和一定是不变的,可以用手算,也可以写程序 答案是,901327897 代码: Java中有十进制转化为二进制,十六进制,八进制的方法,暴力枚举一下即可。(因为

    2024年02月02日
    浏览(31)
  • 【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 2 期 | 精品题解

    🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 🖥️ 蓝桥杯专栏:蓝桥杯题解/感悟 🖥️ TS知识总结:十万字TS知识点总结 👉 你的一键三连是我更新的最大动力❤️! 📢 欢迎私信博主加入前端交流群🌹 第十四届蓝桥杯 Web 应用开发模拟赛第二期昨天正式开始了(本来写的

    2024年02月02日
    浏览(33)
  • 2022 第十四届蓝桥杯模拟赛第二期题目题解(比赛时使用方法)

    目录 第一题:最小的2022 第二题:经过天数 第三题:特殊的十六进制数 第四题:矩阵的最小路径 第五题:质数拆分 第六题:拷贝时间 第七题:单词去重 第八题:最短回文串 第九题:多少个X? 第十题:最小交换 问题描述 请找到一个大于 2022 的最小数,这个数转换成二进

    2023年04月11日
    浏览(36)
  • 第十四届蓝桥杯大赛软件组省赛 Python大学A组 个人暴力题解

    4.23 update: 省一咯 Powered by: NEFU AB-IN 博主个人的暴力题解,基本很少是正解,求轻喷 题意 思路 模拟即可,本身想用Python自带的datetime库,结果发现年不能开那么大,就直接手写了 代码 题意 思路 DFS爆搜即可 代码 题意 思路 直接没思路,一看到数据范围瞬间怂了,脑子里想的

    2023年04月09日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包