蓝桥杯速成刷题清单(上)

news2025/4/12 11:34:26

一、1.排序 - 蓝桥云课

(快速排序)算法代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
int a[N];

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    
    sort(a, a + n);
    
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    
    for (int i = n - 1; i >= 0; i--) {
        cout << a[i] << " ";
    }
    cout << endl;
    /*reverse(a,a+n);
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }*/
    
    return 0;
}

二、2.走迷宫 - 蓝桥云课

(BFS)算法代码:

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

int n, m; // 地图大小
int start_x, start_y, end_x, end_y; // 起始点和终点(1-based)
vector<vector<int>> mp; // 地图(0-based)
vector<vector<int>> path_len; // 记录路径长度
typedef pair<int, int> PII;

// 四个方向偏移量
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, 1, -1};

int main() {
    cin >> n >> m;
    mp.resize(n, vector<int>(m));
    path_len.resize(n, vector<int>(m, -1)); // 初始化为-1

    // 输入地图(按行优先顺序,1-based转换为0-based)
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> mp[i][j];
        }
    }

    // 输入起始点和目标点坐标(1-based)
    cin >> start_x >> start_y >> end_x >> end_y;
    // 转换为0-based
    start_x--; start_y--; end_x--; end_y--;

    queue<PII> q;
    q.push({start_x, start_y});
    path_len[start_x][start_y] = 0; // 起点算作1个格子

    while (!q.empty()) {
        PII tmp = q.front();
        q.pop();

        // 遍历四个方向
        for (int i = 0; i < 4; i++) {
            int nx = tmp.first + dx[i];
            int ny = tmp.second + dy[i];

            // 检查边界
            if (nx < 0 || ny < 0 || nx >= n || ny >= m) {
                continue;
            }

            // 检查障碍物和是否已访问
            if (mp[nx][ny] == 0 || path_len[nx][ny] != -1) {
                continue;
            }

            path_len[nx][ny] = path_len[tmp.first][tmp.second] + 1;
            q.push({nx, ny});
        }
    }

    // 输出结果(若无法到达则输出-1)
    cout << path_len[end_x][end_y] << endl;

    return 0;
}

三、3.小明的背包1 - 蓝桥云课

算法代码:

贪心、但只能通过18.2%:

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

struct Item {
    int w, v;
};

// 定义结构体的比较规则
bool cmp(const Item& a, const Item& b) {
    if (a.v == b.v) {
        return a.w < b.w;
    }
    return a.v > b.v;
}

int main() {
    int n, V;  // 注意这里改为大写的V表示背包容量
    cin >> n >> V;  // 必须先读取n和V的值
    
    Item items[105];
    for (int i = 0; i < n; i++) {
        cin >> items[i].w >> items[i].v;
    }

    // 按价值从大到小来排列
    sort(items, items + n, cmp);
    
    // 从价值最大的物品放入
    int sum = 0;
    int remaining = V;  // 剩余容量
    for (int i = 0; i < n; i++) {
        if (remaining >= items[i].w) {
            sum += items[i].v;
            remaining -= items[i].w;
        }
    }
    cout << sum << endl;
    return 0;
}

 动态规划:

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

const int MAXN = 110;
const int MAXV = 1010;

int N, V;
int w[MAXN], v[MAXN];
int f[MAXN][MAXV];

int main() {
    cin >> N >> V;
    for (int i = 1; i <= N; i++) {
        cin >> w[i] >> v[i];
    }

    memset(f, 0, sizeof(f));
    for (int i = 1; i <= N; i++) {
        for (int j = 0; j <= V; j++) {
            f[i][j] = f[i - 1][j];//不放
            if (j >= w[i])// 背包还有空间
            {
                f[i][j] = max(f[i][j], f[i - 1][j - w[i]] + v[i]);
            }
        }
    }

    cout << f[N][V] << endl;
    return 0;
}

四、4.蓝桥公园 - 蓝桥云课

(Floyd)算法代码: 

#include<bits/stdc++.h>
using namespace std;
using ll =long long;
const int N=500;
ll inf=1e18;
ll n,m,q;
ll d[N][N];
int main()
{
    cin>>n>>m>>q;
  for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            d[i][j]=inf;
        }
    }
    for(int i=1;i<=n;i++)d[i][i]=0;
    while(m--)
    {
        ll u,v,w;cin>>u>>v>>w;
        d[u][v]=min(d[u][v],w);
        d[v][u]=min(d[v][u],w); 
    }
    for(int k=1;k<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
            }
        }
    }
    while(q--)
    {
        int st,ed;cin>>st>>ed;
        cout<<(d[st][ed]>=inf ? -1 : d[st][ed])<<endl;
    }
    return 0;
}

五、5.回文判定 - 蓝桥云课

(字符串、模拟、双指针)算法代码: 

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    int left=0;
    int right=s.size()-1;
    while(left<right)
    {
        if(s[left]!=s[right])
        {
            cout<<"N"<<endl;
            return 0;
        }
        left++;
        right--;
    }
    cout<<"Y"<<endl;
    return 0;
}

六、6.小明的彩灯 - 蓝桥云课

(差分)算法代码: 

#include <iostream>
#include <vector>
#define int long long 
using namespace std;

signed main() {
    int n, q;
    cin >> n >> q;

    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    vector<int> d(n + 1, 0);  // 差分数组,长度为 n+1
    for (int i = 0; i < q; i++) {
        int l, r, x;
        cin >> l >> r >> x;
        d[l] += x;
        if (r < n) {
            d[r + 1] -= x;
        }
    }

    // 对差分数组进行前缀和操作,即可得到每个彩灯的最终亮度
    for (int i = 1; i <= n; i++) {
        d[i] += d[i - 1];
        a[i - 1] += d[i];
        if (a[i - 1] < 0) {
            a[i - 1] = 0;
        }
    }

    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;

    return 0;
}

七、7.解立方根 - 蓝桥云课

(二分)算法代码:(只能25%,这个题有问题) 

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

const double eps = 1e-8;

double cube_root(double x) {
    double l = 0, r = x;
    while (r - l > eps) {
        double mid = (l + r) / 2;
        if (mid * mid * mid < x) {
            l = mid;
        } else {
            r = mid;
        }
    }
    return l;
}

int main() {
    int T;
    cin >> T;
    while (T--) {
        int x;
        cin >> x;
        double ans = cube_root(x);
        printf("%.3f\n", ans);
    }
    return 0;
}

八、10.蓝桥骑士 - 蓝桥云课

(LIS)算法代码: 

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

int main() {
    int n;
    cin >> n;

    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    vector<int> S;
    for (int i = 0; i < n; i++) {
        if (S.empty() || a[i] > S.back()) {
            S.push_back(a[i]);
        } else {
            auto it = lower_bound(S.begin(), S.end(), a[i]);
            *it = a[i];
        }
    }

    cout << S.size() << endl;

    return 0;
}

九、8.蓝桥幼儿园 - 蓝桥云课

(并查集)算法代码:

#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 2e5 + 5;

int fa[MAXN];

// 并查集的查找操作
int find(int x) {
    if (fa[x] != x) {
        fa[x] = find(fa[x]);
    }
    return fa[x];
}

int main() {
    int n, m;
    cin >> n >> m;

    // 初始化每个人的父亲为自己
    for (int i = 1; i <= n; ++i) {
        fa[i] = i;
    }

    // 处理操作
    while (m--) {
        int op, x, y;
        cin >> op >> x >> y;
        if (op == 1) {
            int fx = find(x), fy = find(y);
            // 将两个人所在的连通分量合并
            if (fx != fy) {
                fa[fx] = fy;
            }
        } else {
            int fx = find(x), fy = find(y);
            // 判断两个人是否在同一个连通分量中
            if (fx == fy) {
                cout << "YES" << endl;
            } else {
                cout << "NO" << endl;
            }
        }
    }

    return 0;
}

十、9.蓝桥王国 - 蓝桥云课

(Dijkstra)算法代码: 

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const long long INF = 0x3f3f3f3f3f3f3f3fLL;
const int MAXN = 3e5 + 2;

struct Edge {
    int from, to;
    long long weight;
    Edge(int u, int v, long long w) : from(u), to(v), weight(w) {}
};

vector<Edge> edges[MAXN];

struct Node {
    int id;
    long long dis;
    Node(int i, long long d) : id(i), dis(d) {}
    bool operator<(const Node& other) const {
        return dis > other.dis;
    }
};

int n, m;
long long dist[MAXN];

void dijkstra() {
    int start = 1;
    bool visited[MAXN] = {false};
    for (int i = 1; i <= n; i++) {
        dist[i] = INF;
        visited[i] = false;
    }
    dist[start] = 0;
    priority_queue<Node> pq;
    pq.push(Node(start, dist[start]));
    while (!pq.empty()) {
        Node u = pq.top();
        pq.pop();
        if (visited[u.id])
            continue;
        visited[u.id] = true;
        for (int i = 0; i < edges[u.id].size(); i++) {
            Edge e = edges[u.id][i];
            if (visited[e.to])
                continue;
            if (dist[e.to] > e.weight + u.dis) {
                dist[e.to] = e.weight + u.dis;
                pq.push(Node(e.to, dist[e.to]));
            }
        }
    }
}

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        edges[i].clear();
    }
    while (m--) {
        int u, v, w;
        cin >> u >> v >> w;
        edges[u].push_back(Edge(u, v, w));
    }
    dijkstra();
    for (int i = 1; i <= n; i++) {
        if (dist[i] >= INF) {
            cout << "-1" << " ";
        } else {
            cout << dist[i] << " ";
        }
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2331964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go并发背后的双引擎:CSP通信模型与GMP调度|Go语言进阶(4)

为什么需要理解CSP与GMP&#xff1f; 当我们启动一个Go程序时&#xff0c;可能会创建成千上万个goroutine&#xff0c;它们是如何被调度到有限的CPU核心上的&#xff1f;为什么Go能够如此轻松地处理高并发场景&#xff1f;为什么有时候我们的并发程序会出现奇怪的性能瓶颈&…

Linux服务器——Samba服务器

简介 Samba 是一个开源的跨平台文件共享服务​​&#xff0c;允许 Linux/Unix 系统与 Windows 系统实现文件和打印机的共享与互操作。其核心协议为 ​​SMB/CIFS​​&#xff08;Server Message Block / Common Internet File System&#xff09;&#xff0c;是 Windows 网络中…

华为网路设备学习-17

目录 一、加密算法 二、验证算法 三、IPsec协议 1.IKE协议&#xff08;密钥交换协议&#xff09; ①‌ISAKMP&#xff08;Internet Security Association and Key Management Protocol&#xff09;互联网安全关联和密钥管理协议 ②安全关联&#xff08;SA&#xff09; ③…

机器学习12-集成学习-案例

参考 【数据挖掘】基于XGBoost的垃圾短信分类与预测 【分类】使用XGBoost算法对信用卡交易进行诈骗预测 银行卡电信诈骗危险预测(LightGBM版本) 【数据挖掘】基于XGBoost的垃圾短信分类与预测 基于XGBoost的垃圾短信分类与预测 我分享了一个项目给你《【数据挖掘】基于XG…

【数据库原理及安全实验】实验二 数据库的语句操作

目录 指导书原文 实操备注 指导书原文 【实验目的】 1) 掌握使用SQL语言进行数据操纵的方法。 【实验原理】 1) 面对三个关系表student&#xff0c;course&#xff0c;sc。利用SQL语句向表中插入数据&#xff08;insert&#xff09;&#xff0c;然后对数据进行delete&…

【BFT帝国】20250409更新PBFT总结

2411 2411 2411 Zhang G R, Pan F, Mao Y H, et al. Reaching Consensus in the Byzantine Empire: A Comprehensive Review of BFT Consensus Algorithms[J]. ACM COMPUTING SURVEYS, 2024,56(5).出版时间: MAY 2024 索引时间&#xff08;可被引用&#xff09;: 240412 被引:…

Linux-CentOS-7—— 配置静态IP地址

文章目录 CentOS-7——配置静态IP地址VMware workstation的三种网络模式配置静态IP地址1. 编辑虚拟网络2. 确定网络接口名称3. 切换到网卡所在的目录4. 编辑网卡配置文件5. 查看网卡文件信息6. 重启网络服务7. 测试能否通网8. 远程虚拟主机&#xff08;可选&#xff09; 其他补…

Jupyter Lab 无法启动 Kernel 问题排查与解决总结

&#x1f4c4; Jupyter Lab 无法启动 Kernel 问题排查与解决总结 一、问题概述 &#x1f6a8; 现象描述&#xff1a; 用户通过浏览器访问远程服务器的 Jupyter Lab 页面&#xff08;http://xx.xx.xx.xx:8891/lab&#xff09;后&#xff0c;.ipynb 文件可以打开&#xff0c;但无…

算法训练之位运算

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

C++设计模式+异常处理

#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <stdexcept> // 包含异常类using namespace std;// 该作业要求各位写一…

checkra1n越狱出现的USB error -10问题解决

使用checkra1n进行越狱是出现&#xff1a; 解决办法(使用命令行进行越狱)&#xff1a; 1. cd /Applications/checkra1n.app/Contents/MacOS 2. ./checkra1n -cv 3. 先进入恢复模式 a .可使用爱思助手 b. 或者长按home,出现关机的滑条&#xff0c;同时按住home和电源键&#…

golang-defer延迟机制

defer延迟机制 defer是什么 defer是go中一种延迟调用机制。 执行时机 defer后面的函数只有在当前函数执行完毕后才能执行。 执行顺序 将延迟的语句按defer的逆序进行执行&#xff0c;也就是说先被defer的语句最后被执行&#xff0c;最后被defer的语句&#xff0c;最先被执…

【小沐学Web3D】three.js 加载三维模型(Angular)

文章目录 1、简介1.1 three.js1.2 angular.js 2、three.js Angular.js结语 1、简介 1.1 three.js Three.js 是一款 webGL&#xff08;3D绘图标准&#xff09;引擎&#xff0c;可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API &#xff0c;为我们提供了…

一种替代DOORS在WORD中进行需求管理的方法 (二)

一、前景 参考&#xff1a; 一种替代DOORS在WORD中进行需求管理的方法&#xff08;基于WORD插件的应用&#xff09;_doors aspice-CSDN博客 二、界面和资源 WORD2013/WORD2016 插件 【已使用该工具通过第三方功能安全产品认证】&#xff1a; 1、 核心功能 1、需求编号和跟…

一个基于ragflow的工业文档智能解析和问答系统

工业复杂文档解析系统 一个基于ragflow的工业文档智能解析和问答系统,支持多种文档格式的解析、知识库管理和智能问答功能。 系统功能 1. 文档管理 支持多种格式文档上传(PDF、Word、Excel、PPT、图片等)文档自动解析和分块处理实时处理进度显示文档解析结果预览批量文档…

23种设计模式-行为型模式-访问者

文章目录 简介场景解决完整代码核心实现 总结 简介 访问者是一种行为设计模式&#xff0c;它能把算法跟他所作用的对象隔离开来。 场景 假如你的团队开发了一款能够使用图像里地理信息的应用程序。图像中的每个节点既能代表复杂实体&#xff08;例如一座城市&#xff09;&am…

组播网络构建:IGMP、PIM 原理及应用实践

IP组播基础 组播基本架构 组播IP地址 一个组播IP地址并不是表示具体的某台主机&#xff0c;而是一组主机的集合&#xff0c;主机声明加入某组播组即标识自己需要接收目的地址为该组播地址的数据IP组播常见模型分为ASM模型和SSM模型ASM&#xff1a;成员接收任意源组播数据&…

建筑兔零基础自学记录69|爬虫Requests-2

Requests库初步尝试 #导入requests库 import requests #requests.get读取百度网页 rrequests.get(http://www.baidu.com) #输出读取网页状态 print(r.status_code) #输出网页源代码 print(r.text) HTTP 状态码是三位数字&#xff0c;用于表示 HTTP 请求的结果。常见的状态码有…

NVIDIA PhysX 和 Flow 现已完全开源

NVIDIA PhysX SDK 在 3-Clause BSD 许可下开源已有六年半了&#xff0c;但其中并非所有内容都是开源的。直到最近&#xff0c;随着 GPU 模拟内核源代码在 GitHub 上的发布&#xff0c;这种情况才有所改变。以下是 NVIDIA 分享的消息&#xff0c;以及 Flow SDK 着色器实现的发布…

电脑DNS出错无法打开网页

目录 解决步骤 打开“控制面板”--》“查看网络状态和任务” 打开“更改适配器设置” 对WLAN右键&#xff0c;打开属性 打开“使用下面的DNS服务器地址”--》高级 添加“114.114.114.114”&#xff0c;点击确定 今天晚上突然网页打不开了&#xff0c;一开始我以为是网络的…