15届蓝桥杯刷题速成

news/2024/12/13 1:48:24/

目录

  • 前言
  • [1. 回文判定](https://www.lanqiao.cn/problems/1371/learning/?page=1&first_category_id=1&name=%E5%9B%9E%E6%96%87%E5%88%A4%E5%AE%9A)
    • 代码题解
  • 2.小明的背包
    • 代码题解
  • 3.排序
  • 4.小明的彩灯
  • 5.走迷宫
  • 6.蓝桥公园
  • [ 7.蓝桥王国](https://www.lanqiao.cn/problems/1122/learning/?page=1&first_category_id=1&name=%E8%93%9D%E6%A1%A5%E7%8E%8B%E5%9B%BD)
  • 结语

前言

这期我们来做一下蓝桥杯的速成题,一共七道,粗略感受一下蓝桥杯,我们做题的顺序一定是由易到难,这样能节省很多时间去做难题。

在这里插入图片描述

1. 回文判定

代码题解

#include <iostream>
#include<string>
using namespace std;int main(){string s;cin >> s;int l = 0, r = s.size() - 1;while(l<r){if(s[l]!=s[r]){cout << "N" << endl;break;}l++, r--;}if(l>=r) cout << "Y" << endl;return 0;
}

2.小明的背包

代码题解

#include <iostream>
using namespace std;#define maxn 101 //总共多少个物品
#define maxv 1001 //最大容量
#define inf -1  // 非法状态的值,因为要找最大值,所以定义为-1
#define init 0
#define vType int //价值类型void Knapsack01(int n, int V, int w[maxn], int v[maxn], vType dp[maxn][maxv]){for(int i = 1; i <= V; i++){ //初始化非法状态,因为是求最大价值,放入背包里的物品为0就没有最大值,所以是非法dp[0][i] = inf;}dp[0][0] = 0;for(int i = 1; i <= n; i++){for(int j = 0; j <= V; j++){if(j >= w[i]){//判断就是否大于等于w[i],避免下标越界dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]] + v[i]);}else{dp[i][j] = dp[i-1][j];}}}
}int w[maxn];
vType v[maxn];
vType dp[maxn][maxv];int main()
{int n, V;cin >> n >> V;for(int i = 1; i <= n; i++){cin >> w[i] >> v[i];}vType ret = 0;Knapsack01(n, V, w, v, dp);for(int i = 0; i <= V; i++){ret = max(ret, dp[n][i]);}cout << ret << endl;return 0;
}

3.排序

#include <iostream>
#include <algorithm>
using namespace std;int main()
{int a[500001];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++){if(i) cout << " ";cout << a[i];}cout << endl;for(int i = n - 1; i >= 0; i--){if(i!=n-1) cout << " ";cout << a[i];}return 0;
}

4.小明的彩灯

#include <iostream>
using namespace std;int main()
{int n, q;long long a[500005];cin >> n >> q;for(int i = 0; i < n; i++){cin >> a[i];}for(int i = 0; i < q; i++){int l, r, x;cin >> l >> r >> x;for(int j = l - 1; j <= r -1; j++){a[j] += x;}}for(int i = 0; i < n; i++){if(i) cout <<  ' ';if(a[i] < 0) a[i] = 0;cout << a[i];}return 0;
}

5.走迷宫

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;#define maxn 101
#define base 101
int mat[maxn][maxn];int dir[4][2] = {//表示该顶点的上下左右位置{-1, 0}, {1, 0}, {0, -1}, {0, 1}
};int main()//广度优先搜索
{int hash[maxn][maxn];//用于记录从起始点到另一个点的距离memset(hash, -1, sizeof(hash));//将hash数组元素全部初始化为-1,表示没有经过这个位置int n, m;cin >> n >> m;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){cin >> mat[i][j];}}int x1, x2, y1, y2;cin >> x1 >> y1 >> x2 >> y2;queue<int> q;q.push(x1 * base + y1);hash[x1][y1] = 0;//起始位置的值一定为0    while(!q.empty()){int v = q.front();q.pop();int tx = v / base;int ty = v % base;if(tx == x2 && ty == y2) break;for(int i = 0;i < 4; i++){int rx = tx + dir[i][0];int ry = ty + dir[i][1];if(rx < 1 || rx > n || ry < 1 || ry > m) continue;//越界判断,越界坐标就是非法位置if(mat[rx][ry] == 0) continue;//从原点到该点没有路,也直接到另一个方向位置判断if(hash[rx][ry] == -1){//代表这个点没有访问过hash[rx][ry] = hash[tx][ty] + 1;//从原点到这个方向的点格子数加1q.push(rx * base + ry);}}}cout << hash[x2][y2] << endl;return 0;
}

6.蓝桥公园

#include <iostream>
#include <cstring>
using namespace std;#define maxn 401
#define eType long long eType edges[maxn][maxn];int main()
{int n, m, q;cin >> n >> m >> q;memset(edges,-1,sizeof(edges));for(int i=1;i<=n;i++){edges[i][i] = 0;//顶点到他本身的距离为0}for(int i = 0; i < m; i++){int u, v;eType w;cin >> u >> v >> w;if(edges[u][v]==-1 || edges[u][v] > w){//是无向图所以u到v的距离等于v到u的距离edges[u][v] = w;}if(edges[v][u] == -1 || edges[v][u] > w){edges[v][u] = w;}}for(int k = 1; k <= n; k++){for(int i = 1; i <= n; i++){if(i == k) continue;//i到除他自己以外的顶点if(edges[i][k] == -1) continue;//i到k没有路for(int j = 1; j <= n; j++){if(j == k || j == i) continue;//与上同理if(edges[k][j] == -1) continue;if(edges[i][k] + edges[k][j] < edges[i][j] || edges[i][j] == -1){edges[i][j] = edges[i][k] + edges[k][j];}}}}while(q--){int u,v;cin >> u >> v;cout << edges[u][v] <<endl;}return 0;
}

7.蓝桥王国

#include <iostream>
#include<queue>
#include<vector>
using namespace std;#define inf 1000000001000000001
#define valueType long long
#define maxn 300001struct Dist{int v;valueType w;Dist(){}Dist(int _v,valueType _w):v(_v),w(_w){}bool operator<(const Dist& d)const{//运算符重载,比较w大小进行排序return w>d.w;}
};typedef priority_queue<Dist> Heap;//用邻接表来存储每一个元素,元素类型为Dist这个对象void addEdges(int u, int v, valueType w, vector<Dist>*edges){edges[u].push_back(Dist(v,w));
}void dijkstraInit(int n, int st, Heap& heap, bool* visited, valueType* d){for(int i=0;i<n;i++){visited[i]=false;d[i]=inf;}d[st]=0;heap.push(Dist(st,d[st]));
}int dijstraFindMin(Heap& heap){Dist s=heap.top();//因为运算符重载,优先队列已经排序好每一个顶点,所以该队列的top接口就是路径最短的顶点heap.pop();return s.v;
}void dijstraUpdate(int u, bool* visited, Heap& heap, vector<Dist>* edges, valueType* d){if(visited[u])return ;visited[u] = true;for(int i = 0; i < edges[u].size(); i++){int v = edges[u][i].v;valueType w = edges[u][i].w;if(d[u] + w < d[v]){d[v] = d[u] + w;heap.push(Dist(v, d[v]));}}
}void DijkstraHeap(int n, int st, vector<Dist>* edges, valueType* d){Heap heap;bool visited[maxn]={false};//用于标记顶点是否被访问过dijkstraInit(n, st, heap, visited, d);//while(!heap.empty()){int u=dijstraFindMin(heap);dijstraUpdate(u, visited, heap, edges, d);//更新该点到其他点的最短路径}
}vector<Dist> edges[maxn];
valueType d[maxn];int main()
{int n, m;cin >> n >> m;for(int i = 0; i < m; i++){int u, v ,w;cin >> u >> v >> w;--u, --v;//编号从0开始,改图为单向边addEdges(u, v, w, edges);}DijkstraHeap(n, 0, edges, d);for(int i = 0; i < n; i++){if(i)cout << " ";if(d[i] == inf)cout << -1;else cout << d[i];}cout << endl;return 0;
}

结语

由于本人的能力有限,所以题目中有错的地方可以想我提出纠错,还有不明白的地方可以向我提问,谢谢大家。

在这里插入图片描述

关注我让我们一起学习编程,希望大家能点赞关注支持一下,让我有持续更新的动力,谢谢大家

在这里插入图片描述


http://www.ppmy.cn/news/1554637.html

相关文章

C语言之输入输出

标准库 IO 输入输出功能并非C语言的组成部分&#xff0c;ANSI标准定义了相关的库函数 输入输出 <stdio.h> 流stream是与设备关联的数据的源或者目的地。 文本流&#xff1a;由文本行组成的序列 不同系统的特性可能不一样&#xff0c;比如行最大长度和行结束符 二进制流…

【RL Latest Tech】安全强化学习(Safe RL):理论、方法与应用

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…

VBA高级应用30例应用在Excel中的ListObject对象:向表中添加注释

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

个人IP建设:简易指南

许多个体创业者面临的一个关键挑战是如何为其企业创造稳定的需求。 作为个体创业者&#xff0c;您无法使用营销团队&#xff0c;因此许多人通过推荐和他们的网络来产生需求。因此&#xff0c;扩大您的网络是发展您的业务和产生持续需求的最佳策略。 这就是个人IP和品牌发挥作…

torchaudio.load 段错误

使用 torchaudio.load 时出现崩溃&#xff0c;如图 解决&#xff1a; 安装 ffmpeg ​conda install ffmpeg -c conda-forge 尝试但没解决问题的方法包括 重装 cuda&#xff0c;重装 pytorch&#xff0c;安装 PySoundFile、SoundFile、sox。

针对一个系统的权限管理这样的业务场景,使用各设计模式解说

通义灵码 下面将介绍如何在Java中使用不同的设计模式来实现权限管理系统。每个设计模式都有其特定的应用场景和实现方式&#xff0c;我们将逐一讲解。 1. 单例模式 (Singleton Pattern) 应用场景&#xff1a;确保权限管理服务在整个系统中只有一个实例&#xff0c;避免重复创…

虚幻引擎开发命名规则

UE的命名规则如下: 模版类以T作为前缀,例如TArray, TMap, TSet。UObject派生类都以U前缀。AActor派生类都以A前缀。SWidget派生类都以S前缀。全局对象使用G开头,如GEngine。抽象接口以I前缀。枚举以E开头。bool变量以b前缀,如bPendingDestruction。其他的大部分以F开头,如…

【ubuntu】ubuntu24.04.1的apt源配置

阿里云镜像格式重新整理 sudo vim /etc/apt/sources.list.d/ubuntu.sources粘贴以下内容 # Ubuntu 24.04 (Noble) 官方源 Types: deb URIs: https://mirrors.aliyun.com/ubuntu/ Suites: noble noble-updates noble-backports noble-securityComponents: main restricted u…