行业知识
第十四届蓝桥杯大赛软件赛省赛(C/C++ 大学B组)
蓝���杯 2023年省赛真题
C/C++ 大学B组
- 试题 A: 日期统计
- 试题 B: 01 串的熵
- 试题 C: 冶炼金属
- 试题 D: 飞机降落
- 试题 E: 接龙数列
- 试题 F: 岛屿个数
- 试题 G: 子串简写
- 试题 H: 整数删除
- 试题 I: 景区导游
- 试题 J: 砍树
要来力
()试题 A: 日期统计
本题总分: 5 5 5 分
【问题描述】
小蓝现在有一个长度为 100 100 100 的数组,数组中的每个元素的值都在 0 0 0 到 9 9 9 的范围之内。数组中的元素从左至右如下所示:
5 5 5 6 6 6 8 8 8 6 6 6 9 9 9 1 1 1 6 6 6 1 1 1 2 2 2 4 4 4 9 9 9 1 1 1 9 9 9 8 8 8 2 2 2 3 3 3 6 6 6 4 4 4 7 7 7 7 7 7 5 5 5 9 9 9 5 5 5 0 0 0 3 3 3 8 8 8 7 7 7 5 5 5 8 8 8 1 1 1 5 5 5 8 8 8 6 6 6 1 1 1 8 8 8 3 3 3 0 0 0 3 3 3 7 7 7 9 9 9 2 2 2 7 7 7 0 0 0 5 5 5 8 8 8 8 8 8 5 5 5 7 7 7 0 0 0 9 9 9 9 9 9 1 1 1 9 9 9 4 4 4 4 4 4 6 6 6 8 8 8 6 6 6 3 3 3 3 3 3 8 8 8 5 5 5 1 1 1 6 6 6 3 3 3 4 4 4 6 6 6 7 7 7 0 0 0 7 7 7 8 8 8 2 2 2 7 7 7 6 6 6 8 8 8 9 9 9 5 5 5 6 6 6 5 5 5 6 6 6 1 1 1 4 4 4 0 0 0 1 1 1 0 0 0 0 0 0 9 9 9 4 4 4 8 8 8 0 0 0 9 9 9 1 1 1 2 2 2 8 8 8 5 5 5 0 0 0 2 2 2 5 5 5 3 3 3 3 3 3
现在他想要从这个数组中寻找一些满足以下条件的子序列:
()1. 子序列的长度为 8 8 8;
2. 这个子序列可以按照下标顺序组成一个 y y y y m m d d \rm yyyymmdd yyyymmdd 格式的日期,并且要求这个日期是 2023 2023 2023 年中的某一天的日期,例如 20230902 20230902 20230902, 20231223 20231223 20231223。 y y y y \rm yyyy yyyy 表示年份, m m \rm mm mm 表示月份, d d \rm dd dd 表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。
请你帮小蓝计算下按上述条件一共能找到多少个不同的 2023 2023 2023 年的日期。对于相同的日期你只需要统计一次即可。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
235
枚举长度为 8 8 8的子序列复杂度直接炸裂,不过考虑到日期前缀为 2023 2023 2023且唯一,因为找到 2023 2023 2023第一次出现的位置截断后枚举长度为 4 4 4的子序列与 2023 2023 2023年的合法日期取交集即可。
#include char *A = "5686916124919823647759503875815861830379270588570991944686338516346707827689565614010094809128502533";char *prefix = "2023";int n = 100, m = 0, ds[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };std::set subs[4], target;std::vector ans;int main() { for (int k = 0; k = 0; --i) for (int sb : subs[i]) subs[i + 1].insert(sb * 10 + A[m] - '0'); subs[0].insert(A[m] - '0'); } for (int m = 1; m for (double i = 0, j = n; i printf("%.0lf", i); return 0; }}Vimax},因为取最大值可能会使 ⌊ A i V i ⌋ B i \left\lfloor\cfrac{A_i}{V_i}\right\rfloorB_i ⌊ViAi⌋Bi成立,同理最小的 V V V取 max { V i m a x } \max\{V_i^{max}\} max{Vimax}。对于 A A A、 B B B我们取 ⌊ A B ⌋ \left\lfloor\cfrac{A}{B}\right\rfloor ⌊BA⌋做 V m a x V^{max} Vmax,当 A = V B A=VB A=VB时 V V V的取值唯一,显然成立,否则 ⌈ A B ⌉ = V m a x + 1 \left\lceil\cfrac{A}{B}\right\rceil = V^{max} + 1 ⌈BA⌉=Vmax+1,当取 V m a x + 1 V^{max} + 1 Vmax+1做 V V V时带入 ⌊ A V ⌋ = ⌊ B ( V − 1 ) + A ′ V ⌋
上一篇:怎么在浏览器连接服务器?
下一篇:方舟生存进化下载指南