当前位置: 首页 > news >正文

蓝桥真题讲解

目录

第一题

题目链接

题目解析

填空解答

第二题

题目链接

题目解析

代码原理

代码编写

第三题

题目链接

题目解析

代码原理

代码编写

本题总结

第四题 

题目链接

题目解析

代码原理

代码编写

第五题

题目链接

题目解析

代码原理

​编辑代码编写

使用了vector

使用数组 

 本题总结


第一题

题目链接

0最大降雨量 - 蓝桥云课

题目解析

填空解答

看不懂的小伙伴可以看一下下面的这张图

第二题

题目链接

0重新排序 - 蓝桥云课

题目解析

代码原理

代码编写

#include<iostream>#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N = 100000;ll a[N], cnt[N];int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);ll n = 0, m = 0;cin >> n;for(ll i = 1; i <= n; i++){cin >> a[i];}cin >> m;ll l = 0, r = 0;while(m--){cin >> l >> r;cnt[l]++;cnt[r + 1]--;}for(ll i = 1; i <= n; i++){cnt[i] += cnt[i - 1];}ll sumF = 0, sumS = 0;for(ll i = 1; i <= n; i++){sumF += cnt[i] * a[i];}sort(a + 1, a + 1 + n);sort(cnt + 1, cnt + 1 + n);for(ll i = 1; i <= n; i++){sumS += cnt[i] * a[i];}cout << sumS - sumF << endl;return 0;}

第三题

题目链接

0时间显示 - 蓝桥云课

题目解析

代码原理

代码编写

#include<iostream>#include<bits/stdc++.h>using namespace std;typedef long long ll;int main(){ll n = 0,h = 0, m = 0, s = 0;cin >> n;h = (n / 1000) / 3600 % 24;m = (n / 1000) % 3600 / 60;s = (n / 1000) % 3600 % 60;cout << setw(2) << setfill('0') << h << ':';cout << setw(2) << setfill('0') << m <<':';cout << setw(2) << setfill('0') << s << endl;return 0;}

秒化成时需要整除3600再取模24

秒化成分需要取模3600再取整60

秒化成秒需要取模3600再取模60

本题总结

第四题 

题目链接

题目解析

代码原理

用上set容器,将符合边缘字符条件的字母放进set容器中,之后再将原字符串与set容器中的字母进行匹配,没有在set容器中出现的的直接将其放进另一个新字符串中,循环往复即可,直至符合这两个条件——第一个条件:set容器为空;第二条件:新字符串长度为0。则结束循环

代码编写

#include <iostream>#include<bits/stdc++.h>using namespace std;int main(){// 请在此输入您的代码string s1,s2;set<int> q;cin >> s1;while(true){for(int i = 1; i < s1.size() - 1; i++){if(s1[i] == s1[i - 1] && s1[i] != s1[i + 1]){q.insert(i + 1);q.insert(i);}if(s1[i] == s1[i + 1] && s1[i] != s1[i - 1]){q.insert(i - 1);q.insert(i);}}if(q.empty()) {cout << s1 << endl;break;}s2.clear();for(int i = 0; i < s1.size(); i++){if(q.find(i) == q.end()){s2 += s1[i];}}s1 = s2;q.clear();if(s1.size() == 0) {cout << "EMPTY"<< endl;break;}}return 0;}

因为2的64次方很大因此我们可以考虑死循环,退出循环的条件前面也说了,那么这里有两个地方需要注意一下:第一个地方是s2.clear(),每次使用前需要先清除上一次残留的字符串,第二个地方是q(即set容器)中的残留元素,这两个地方少一个就会造成死循环

第五题

题目链接

0子矩阵 - 蓝桥云课

题目解析

代码原理


代码编写

使用了vector
#include<iostream>
#include<vector>
using namespace std;
int jisuan(const vector<vector<int> >& brr, int a, int b)
{int max_val = -0x3f3f3f3f, min_val = 0x3f3f3f3f;for(int c = 0; c < a; c++){for(int d = 0; d < b; d++){min_val = min(min_val, brr[c][d]);max_val = max(max_val, brr[c][d]);}}return (long long)max_val * min_val ;
}
int main()
{int n = 0, m = 0, a = 0, b = 0;cin >> n >> m >> a >> b;vector<vector<int> > arr(n, vector<int>(m));for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){cin >> arr[i][j];}}vector<vector<int> > brr(n, vector<int>(m));int sum = 0;for(int i = 0; i <= n - a; i++){for(int j = 0; j <= m - b; j++){for(int x = 0; x < a; x++){for(int y = 0; y < b; y++){brr[x][y] = arr[i + x][j + y];}}sum += jisuan(brr, a, b) % 998244353;}}cout << sum;return 0;
}
使用数组 
#include <iostream>
#include <climits>using namespace std;const int MOD = 998244353;// 计算子矩阵的价值
int calculateValue(int subMatrix[][1000], int a, int b) {int maxVal = INT_MIN;int minVal = INT_MAX;for (int i = 0; i < a; ++i) {for (int j = 0; j < b; ++j) {maxVal = max(maxVal, subMatrix[i][j]);minVal = min(minVal, subMatrix[i][j]);}}return (long long)maxVal * minVal % MOD;
}// 暴力解法主函数
int bruteForce(int matrix[][1000], int n, int m, int a, int b) {int sum = 0;// 遍历所有可能的子矩阵for (int i = 0; i <= n - a; ++i) {for (int j = 0; j <= m - b; ++j) {int subMatrix[1000][1000];// 提取子矩阵for (int x = 0; x < a; ++x) {for (int y = 0; y < b; ++y) {subMatrix[x][y] = matrix[i + x][j + y];}}sum = (sum + calculateValue(subMatrix, a, b)) % MOD;}}return sum;
}int main() {int n, m, a, b;cin >> n >> m >> a >> b;int matrix[1000][1000];for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {cin >> matrix[i][j];}}cout << bruteForce(matrix, n, m, a, b) << endl;return 0;
}

 本题总结

1.二维数组的定义或二维的vector的定义,这里需要注意的是

 vector<vector<int> /*空格*/ > arr(n, vector<int>(m));

相信大家都发现了吧第一个vector的尖括号和第二个尖括号之间有空格,当然这个只在devc++中需要加空格,其他编译器不会出现这种情况

2.二维数组或二维vector的传参

vector

数组

本篇文章的内容就先到这里,我们下期再见!


http://www.mrgr.cn/news/95235.html

相关文章:

  • 【C#】CS学习之Modbus通讯
  • 24. 状态模式
  • Vulnhub-wordpress通关攻略
  • 蓝桥杯 之 暴力回溯
  • 切线、斜率、梯度和导数以及其关系
  • css-grid布局
  • 限幅滤波法对数据进行滤波优化
  • Vulnhub-dedecms织梦通关攻略
  • 【C++网络编程】第2篇:简单的TCP服务器与客户端
  • CIR-Net:用于 RGB-D 显著性目标检测的跨模态交互与优化(问题)
  • vmware下linux无法上网解决方法
  • 啃书—以国产化光耦ORPC-847芯片手册为例
  • 字节大模型面经
  • 单片机flash存储也做磨损均衡
  • 【C#语言】C#中的同步与异步编程:原理、示例与最佳实践
  • RAG各类方法python源码解读与实践:RAG技术综合评测【3万字长文】
  • Redis核心机制(一)
  • C++学习之nginx+fastDFS
  • 从零开始实现Stable Diffusion本地部署
  • DeDeCMS靶场获取wenshell攻略