第十四届蓝桥杯(八题C++ 题目+代码+注解)

目录

题目一(日期统计 纯暴力):

代码:

 题目二(01串的熵 模拟):

代码:

 题目三(治炼金属):

代码:

 题目四(飞机降落 深度搜索):

代码:

题目五(接龙数列 动态规划):

代码:

 题目六(岛屿个数 广度优先):

 代码:

题目七(子串简写 尺取法):

代码:

题目八(整数删除):

代码:

题目一(日期统计 纯暴力):

代码:

#include <iostream>
using namespace std;
int main() 
{int array[100] = {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, 3,8, 5, 1, 6, 3, 4, 6, 7, 0, 7, 8, 2, 7, 6, 8, 9, 5, 6, 5, 6,1, 4, 0, 1, 0, 0, 9, 4, 8, 0, 9, 1, 2, 8, 5, 0, 2, 5, 3, 3};int Month[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int ans = 0;for (int month = 1; month <= 12; ++month)//枚举月{for (int day = 1; day <= Month[month]; ++day)//枚举天{int date[8] = { 2, 0, 2, 3, month / 10, month % 10, day / 10, day % 10 };//把八位数得出int k = 0;for (int i = 0; i < 100; ++i) //遍历100个数,是否能满足有该天{if (array[i] == date[k]) //满足该位{++k;//下一位if (k == 8) //等于8,即满足该年月日,答案加一{ans++;break;}}}}}cout << ans;return 0;
}

 题目二(01串的熵 模拟):

代码:

#include <iostream>//H(s)= -(0的个数)/(总长度)*log2((0的个数)/(总长度))*0的个数-(1的个数)/(总长度)*log2((1的个数)/(总长度))*1的个数
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{int n = 23333333;//0出现的次数更少for (int i = 1; i < n / 2; ++i){double a = i * 1.0 / n;//0的占比double b = (n - i) * 1.0 / n;//1的占比double res1,res2;res1 = 0 - (a * log2(a) * i);//求0的部分res2 = 0 - b * log2(b) * (n - i);//求1的部分if (abs((res1+res2) - 11625907.5798) < 0.0001)//差距在0.000内{cout << i << endl;break;}}return 0;
}

 题目三(治炼金属):

代码:

#include <iostream>
#include <algorithm>
using namespace std;
struct node
{int x, s;
};
bool cmp(node a, node b)//v小的排前
{return a.x / a.s < b.x / b.s;
}
int main()
{int n;cin >> n;int maxx = 1e9;node a[10100];for (int i = 1; i <= n; i++){cin >> a[i].x >> a[i].s;}sort(a + 1, a + 1 + n, cmp);//能满足所有的,且v为最大maxx = a[1].x / a[1].s;int minn = 0;for (int z = maxx; z >= 1; z--)//由最大的往前算,递减,直到有一个不满足{int flag = 0;for (int i = 1; i <= n; i++){if (a[i].x / z > a[i].s){flag = 1;minn = z;break;}}if (flag == 1)break;}cout << minn + 1 << " " << maxx;
}

 题目四(飞机降落 深度搜索):

代码:

#include <iostream>
#include <vector>
using namespace std;
struct plane// 创建飞机结构体变量
{int t, d, l;
};
bool vis[15];  // true表示飞机降落,false表示飞机未降落
bool flag;  // 标记是否全部安全降落
vector<plane> p(15);
int m, cnt;
void dfs(int cnt,int last)  // lasttime表示此前所有飞机降落所需的单位时间
{if (cnt == m)//所有飞机都可降落{flag = true;return;}for (int i = 0; i < m; i++)//遍历所有飞机{if (!vis[i] && p[i].t + p[i].d >= last)  // 还未降落且只有最迟降落时间(来的时刻+盘旋时间) > lasttime 的飞机才可以安全降落{vis[i] = true;dfs(cnt + 1, max(last, p[i].t) + p[i].l);vis[i] = false;}}
}int main()
{int T;cin >> T;while (T--){cin >> m;for (int i = 0; i < m; ++i)cin >> p[i].t >> p[i].d >> p[i].l;flag = false;dfs(0, 0);if (flag)cout << "YES" << endl;elsecout << "NO" << endl;}return 0;
}

题目五(接龙数列 动态规划):

代码:

#include <iostream>//动态规划,类0、1背包问题
#include <string>
using namespace std;
int dp[10];//第n个时以i结尾的最长接龙序列
int main()
{int n;cin >> n;string s;int m = 0;for (int i = 0; i < n; i++) {cin >> s;int x = s[0] - '0', y = s.back() - '0';//x表示该数的首字母,y表示该数的最后一个字母//除了以y结尾的,其它不变dp[y] = max(dp[x] + 1, dp[y]);//dp[x]+1表示选该数字时的最长序列,dp[y]表示不选该数字时的最长序列,继承m = max(m, dp[y]);//每次比较,记录最大值}cout << n - m << endl;return 0;
}

 题目六(岛屿个数 广度优先):

 代码:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 77;
string s[N];
int book[N][N];
int m, n, ans=0;
int dx[8] = { 0,0,1,-1,1,1,-1,-1 };
int dy[8] = { 1,-1,0,0,1,-1,1,-1 };
int check(int x,int y)//通过海水(0)是否能到达边界判断这个岛屿是否在环岛内
{queue<pair<int, int>>q;q.push({ x, y });int vis[N][N];memset(vis, 0, sizeof(vis));//访问数组,初始化为0while (!q.empty()){x = q.front().first, y = q.front().second;q.pop();if (x == 1 || x == n || y == 1 || y == m)//到边界,则不在环岛内return 1;for (int i = 0; i < 8; i++){int tx = x + dx[i], ty = y + dy[i];if (vis[tx][ty] == 1 || s[tx][ty] == '1')//边界条件continue;vis[tx][ty] = 1;q.push({ tx,ty });}}return 0;
}
void bfs(int x,int y)//遍历这个岛屿
{queue<pair<int, int>>q;q.push({ x,y });book[x][y] = 1;while (!q.empty()){x = q.front().first, y = q.front().second;q.pop();for (int i = 0; i < 4; i++){int tx = x + dx[i], ty = y + dy[i];if (tx<1 || ty<1 || tx>n || ty>m || book[tx][ty] == 1 || s[tx][ty] == '0')//边界条件continue;book[tx][ty] = 1;q.push({ tx,ty });}}
}
void solve()
{memset(book, 0, sizeof(book));//访问数组,初始为0cin >> n >> m;for (int i = 1; i <= n; i++)cin >> s[i], s[i] = " " + s[i];for(int i=1;i<=n;i++)for (int j = 1; j <= m; j++){if (book[i][j] == 0 && s[i][j] == '1')//没访问过且为陆地{bfs(i, j);if (check(i, j))//判断是否在环岛内,不在则加一ans++;}}cout << ans << endl;
}
int main()
{int T;cin >> T;while (T--){ans = 0;solve();}
}

题目七(子串简写 尺取法):

代码:

#include <iostream>//尺取法
using namespace std;
int k, t;
string s;
long long sum = 0;
int main()
{char c1, c2;cin >> k >> s >> c1 >> c2;for (int j = 0; j < s.length(); j++){if (s[j] == c1)  //t记录j及以前c1的个数t++;if (s[j + k - 1] == c2) //刚好满足k之后的是否为c2sum += t;}cout << sum;return 0;
}

题目八(整数删除):

代码:

#include<iostream>
#include<vector>
#include<queue>
#include<functional>//greater降序排序,less升序排序
#define int long long
using namespace std;
typedef pair<int, int> pii;
const int N = 5e5 + 10;
int a[N], l[N], r[N], st[N];//l存左下标,r存右下标
signed main()
{int n, k;cin >> n >> k;priority_queue<pii, vector<pii>, greater<pii>> q;//最小堆排序for (int i = 0; i < n; i++){cin >> a[i];q.push({ a[i],i });//存值和下标st[i] = a[i];//存值l[i] = i - 1;r[i] = i + 1;if (r[i] == n) r[i] = -1;}while (k)//k次操作{pii t = q.top();//取对顶q.pop();if (t.first != st[t.second])//值与之前不相等,则把新值,下标存入,重新排序{q.push({ st[t.second],t.second });continue;}k--;int pos = t.second;//取该次的下标if (l[pos] >= 0) st[l[pos]] += t.first;//左加值if (r[pos] >= 0) st[r[pos]] += t.first;//右加值if (l[pos] >= 0) r[l[pos]] = r[pos];//该左边值的右下标if (r[pos] >= 0) l[r[pos]] = l[pos];//该右边值的左下标st[pos] = -1;//标记为-1,表示移除队列}for (int i = 0; i < n; i++)//不等与-1的,按序输出{if (st[i] != -1)cout << st[i] << ' ';}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试Windows域控制器服务是否运行

测试Windows域控制器服务是否正常运行&#xff0c;可以通过以下几种方法&#xff1a; 检查服务状态&#xff1a; 打开“服务器管理器”&#xff08;Server Manager&#xff09;。在左侧导航栏中选择“工具”&#xff08;Tools&#xff09;&#xff0c;然后打开“服务”&#xf…

Java 变得越来越像 Rust?

随着编程技术的增强和复杂性的提升&#xff0c;许多编程语言也纷纷效仿&#xff0c;Java 也不例外。 另一边&#xff0c;尽管社区内部问题重重&#xff0c;但 Rust 仍逐年获得开发人员的喜爱。这背后都是有原因的&#xff1a;Rust 的编译器让开发人员避免了各种问题。编译器对…

Redis开源协议调整,我们怎么办?

2024年3月20日, Redis官方宣布&#xff0c;从 Redis 7.4版本开始&#xff0c;Redis将获得源可用许可证 ( RSALv2 ) 和服务器端公共许可证 ( SSPLv1 ) 的双重许可&#xff0c;时间点恰逢刚刚完成最新一轮融资&#xff0c;宣布的时机耐人寻味。 Redis协议调整&#xff0c;对云计算…

前端开发的主要语言有哪些?

1、HTML (HyperText Markup Language) 作用&#xff1a;HTML是构建网页内容的基础&#xff0c;是一种标记语言&#xff0c;用来定义网页的结构&#xff0c;如标题、段落、列表、表格、图像、链接等元素。优点&#xff1a;易于学习&#xff0c;广泛兼容&#xff0c;标准化程度高…

分布式全闪占比剧增 152%,2023 年企业存储市场报告发布

近日&#xff0c;IDC 发布了 2023 年度的中国存储市场报告。根据该报告&#xff0c;在 2023 年软件定义存储的市场占比进一步扩大&#xff0c;分布式全闪的增长尤其亮眼&#xff0c;其市场份额从 2022 年的 7% 剧增到 2023 年的 17.7%&#xff0c;增长了 152%。 01 中国企业存…

C++之海量数据处理(位图+布隆过滤器)

前言&#xff1a;在现实中我们经常会碰到问题的数据量特别大的情况&#xff0c;无法将所有数据都加载到内存里面&#xff0c;这个时候&#xff0c;更不要说对数据进行处理了&#xff0c;该怎么办呢&#xff1f; 目录 目录 一&#xff0c;位图 拓展1&#xff1a;如果是要我们…

Linux之用户账号、用户组和与账号有关的系统文件

目录 一、基本介绍 1.用户和用户组 2.UID和GID 二、 账户管理 1.查看用户的UID和GID 2.添加账户 3.删除账号 4.修改账号 5.账户口令 三、分组管理 1.新增用户组 2.删除用户组 3.修改用户组 4.用户组切换 四、与账号有关的系统文件 1./etc/passwd 2./etc/shado…

Intel FPGA (3):数码管显示

Intel FPGA (3)&#xff1a;数码管显示 前提摘要 个人说明&#xff1a; 限于时间紧迫以及作者水平有限&#xff0c;本文错误、疏漏之处恐不在少数&#xff0c;恳请读者批评指正。意见请留言或者发送邮件至&#xff1a;“Email:noahpanzzzgmail.com”。本博客的工程文件均存放在…

SSM框架学习——SqlSession以及Spring与MyBatis整合

SqlSession以及Spring与MyBatis整合 准备所需要的JAR包 要实现MyBatis与Spring的整合&#xff0c;很明显需要这两个框架的JAR包&#xff0c;但是只是使用这两个框架中所提供的JAR包是不够的&#xff0c;还需要配合其他包使用&#xff1a; Spring的JAR包MyBatis的JAR包Spring…

【源头活水】顶刊解读!IEEE T-PAMI (CCF-A,IF 23.6)2024年46卷第一期 [3]

“问渠那得清如许&#xff0c;为有源头活水来”&#xff0c;通过前沿领域知识的学习&#xff0c;从其他研究领域得到启发&#xff0c;对研究问题的本质有更清晰的认识和理解&#xff0c;是自我提高的不竭源泉。为此&#xff0c;我们特别精选论文阅读笔记&#xff0c;开辟“源头…

上位机图像处理和嵌入式模块部署(qmacviusal边缘宽度测量)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面有一篇文章&#xff0c;我们了解了测量标定是怎么做的。即&#xff0c;我们需要提前知道测量的方向&#xff0c;灰度的方向&#xff0c;实际的…

如何选择最佳AVR微控制器:综合性能、功耗、封装及生态支持全方位考量

AVR 微控制器的定义 AVR 微控制器是由Atmel公司&#xff08;现已被Microchip Technology收购&#xff09;开发的一种基于 Reduced Instruction Set Computing (RISC) 架构的8位微控制器系列。其名称“AVR”来源于其最初的设计理念——Audio Video Recorder&#xff0c;尽管后来…