导航菜单
首页 >  蓝桥杯c语言b组真题解析  > 2023第十四届蓝桥杯C/C++B组省赛题解

2023第十四届蓝桥杯C/C++B组省赛题解

2023蓝桥C/C++B组省赛

文章目录2023蓝桥C/C++B组省赛试题A: 日期统计题目描述枚举参考代码 试题B: 01 串的熵题目描述枚举|模拟参考代码 试题C: 冶炼金属题意描述取交集参考代码 试题D: 飞机降落题意描述DFS+剪枝, 懒得写 试题E: 接龙数列题意描述DP参考代码 试题F: 岛屿个数题意描述dfs | 连通块参考代码 试题G: 子串简写题意描述前缀和参考代码 试题H: 整数删除题意描述双向链表 | 最小堆参考代码 试题I: 景区导游题意描述带权LCA参考代码 试题J: 砍树题意描述树上差分参考代码

试题A: 日期统计 题目描述

【问题描述】 小蓝现在有一个长度为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 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

现在他想要从这个数组中寻找一些满足以下条件的子序列:

子序列的长度为8;

这个子序列可以按照下标顺序组成一个yyyymmdd 格式的日期,并且 要求这个日期是2023 年中的某一天的日期,例如20230902,20231223。yyyy 表示年份,mm 表示月份,dd 表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。

请你帮小蓝计算下按上述条件一共能找到多少个不同的2023 年的日期。 对于相同的日期你只需要统计一次即可。

枚举

用八重循环直接枚举每一位数字, 题目中的日期序列有很多限制, 如前四位必须是2023, 又比如月份只能以0或1开头等等。利用这些限制能大大降低运行时间, 实测只要限制了前四位, 基本是瞬间跑出结果。

注意需要用哈希表去重。

参考代码 //// Created by trudbot on 2023/4/9.//#include using namespace std;int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};set res;void check(int m, int d) {if (m 12 || d days[m]) return;res.insert(m * 100 + d);}int main () {int ns[100];for (int & n : ns) cin >> n;for (int a = 0; a

相关推荐: