第十四届蓝桥杯大赛软件赛省赛(C/C++ 研究生组)

news/2024/11/28 23:42:12/

蓝桥杯 2023年省赛真题
C/C++ 大学G组

 试题 A: 工作时长
 试题 B: 与或异或
 试题 C: 翻转
 试题 D: 阶乘的和
 试题 E: 公因数匹配
 试题 F: 奇怪的数
 试题 G: 太阳
 试题 H: 子树的大小
 试题  I: 高塔
 试题 J: 反异或 01 串


除去第 F \rm F F 题,其他题目在其他组别都有出现过,这里就不重写了。


奇怪的数

时间限制: 1.0 s 1.0\mathrm s 1.0s 内存限制: 256.0 M B 256.0\mathrm{MB} 256.0MB 本题总分: 15 15 15


【问题描述】

  小蓝最近在找一些奇怪的数,其奇数数位上是奇数,而偶数数位上是偶数。同时,这些数的任意 5 5 5 个连续数位的和都不大于 m m m
  例如当 m = 9 m = 9 m=9 时, 10101 10101 10101 12303 12303 12303 就是奇怪的数,而 12345 12345 12345 11111 11111 11111 则不是。
  小蓝想知道一共有多少个长度为 n n n 的上述的奇怪的数。你只需要输出答案对 998244353 998244353 998244353 取模的结果。

【输入格式】

  输入一行包含两个整数 n , m n, m n,m,用一个空格分隔。

【输出格式】

  输出一行包含一个整数表示答案。

【样例输入】

5 5

【样例输出】

6

【评测用例规模与约定】

  对于 30 % 30\% 30% 的评测用例, n ≤ 12 n ≤ 12 n12
  对于 60 % 60\% 60% 的评测用例, n ≤ 5000 n ≤ 5000 n5000
  对于所有评测用例, 5 ≤ n ≤ 2 × 1 0 5 , 0 ≤ m ≤ 50 5 ≤ n ≤ 2 × 10^5,0 ≤ m ≤ 50 5n2×1050m50


动态规划


  因为是要校验连续的 5 5 5 个数位上的数字之和是否大于 m m m,自然能设计出状态 f i , a , b , c , d f_{i,a,b,c,d} fi,a,b,c,d,表示第 i − 3 i-3 i3 个数位上的数字为 a a a i − 2 : b i-2:b i2:b i − 1 : c i-1:c i1:c i : d i:d i:d 的奇怪的数有多少个,容易找到状态转移方程: f i , a , b , c , d = ∑ f i − 1 , e , a , b , c , a + b + c + d + e ≤ m . f_{i,a,b,c,d}=\sum f_{i-1,e,a,b,c},a+b+c+d+e\leq m. fi,a,b,c,d=fi1,e,a,b,c,a+b+c+d+em.  转移复杂度为 O ( n D 5 ) O(nD^5) O(nD5),其中 D = 5 D=5 D=5 即每个数位可能的取值的个数,这样看来复杂度就超了, 1 s \rm 1s 1s 指定是跑不出来,于是考虑维护 f f f 在第二维的前缀和,具体地说我们记: g i , a , b , c , d = ∑ j = 0 a f i , j , b , c , d . g_{i,a,b,c,d}=\sum_{j=0}^af_{i,j,b,c,d}. gi,a,b,c,d=j=0afi,j,b,c,d.  则状态转移方程可改写为: g i , a , b , c , d = g i , a − 1 , b , c , d + g i − 1 , max ⁡ ( 0 , min ⁡ ( 9 , m − a − b − c − d ) ) , a , b , c . g_{i,a,b,c,d}=g_{i,a-1,b,c,d}+g_{i-1,\max(0,\min(9,m-a-b-c-d)),a,b,c}. gi,a,b,c,d=gi,a1,b,c,d+gi1,max(0,min(9,mabcd)),a,b,c.  转移复杂度为 O ( n D 4 ) O(nD^4) O(nD4) 1 s \rm 1s 1s 有那么一点极限,标程很有可能不是动规。还有就是在实现时为了使 D = 5 D=5 D=5,转移过程会有一定的微调,具体看代码吧。

#include <stdio.h>const int M = 12, mod = 998244353;int n, m, ans, g[2][M][M][M][M];int main() {scanf("%d %d", &n, &m);int p = 1, q = 0;for (int a = p; a < 10; a += 2)for (int b = q; b < 10; b += 2)for (int c = p; c < 10; c += 2)for (int d = q; d < 10; d += 2) {g[0][a + 2][b][c][d] = g[0][a][b][c][d] + (a + b + c + d <= m);}for (int i = 5; i <= n; ++i) {p ^= 1, q ^= 1;for (int a = p; a < 10; a += 2)for (int b = q; b < 10; b += 2)for (int c = p; c < 10; c += 2)for (int d = q; d < 10; d += 2) {int f = m - a - b - c - d;if (q != (f & 1)) --f;if (f > 8 + p) f = 8 + q;g[i & 1][a + 2][b][c][d] = (g[i & 1][a][b][c][d] + (f < q ? 0 : g[~i & 1][f + 2][a][b][c])) % mod;}}for (int b = q; b < 10; b += 2)for (int c = p; c < 10; c += 2)for (int d = q; d < 10; d += 2) {int f = m - b - c - d;if (f < p) continue;if (p != (f & 1)) --f;if (f > 8 + p) f = 8 + p;ans = (ans + g[n & 1][f + 2][b][c][d]) % mod;}printf("%d", ans);
}

  输入200000 50 4000 4000 4000 系锐龙刚好在 1 s \rm 1s 1s 跑完,这放在评测机上不开 O 2 \rm O2 O2 就超时了。


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

相关文章

Java教程【01.02】Java引用类型数组和继承的意义

Java引用类型数组和继承的意义 Java引用类型数组和继承是Java中常用的两个概念,它们在编程中起到重要的作用。在本教程中,我们将讨论Java引用类型数组的使用以及继承的意义,并提供相关的示例。 步骤1:创建引用类型数组 Java中的引用类型数组允许我们在单个变量中存储多个…

RSSI 异常分类

2.2.1 工程质量不好导致 RSSI 异常 指工程质量不好引起的 RSSI 异常&#xff0c;比如接头制作不符合规范和接头松动等原因导致主 集或分集产生自激、天线进水、设备老化等都会引起 RSSI 值异常。 由自激产生的 RSSI 异常通常表现为主集或分集过大、主分集差值过大。在已发…

win10 高内存、CPU占用(接近百分之百)

问题描述&#xff1a; 1. 电脑内存8g&#xff0c;CPU为 i5 6300HQ 2. 有时用着用着电脑的内存cpu就占用的90%以上。打开任务管理器&#xff0c;有个system进程经常CPU占用约30% 3. 开机有时占用会降下来&#xff0c;有时有cpu、内存一直接近100%的占用&#xff0c;而且不会随着…

CPU锁频率在0.78 GHz

文章目录 问题解决办法 问题 我笔记本最近容易锁频率&#xff0c;CPU型号为&#xff1a;i5-6300HQ&#xff0c;很迷幻… 解决办法 **拔电源&#xff01;&#xff01;**重新查一下试试&#xff08;我是这样就好使了&#xff0c;不知道是机缘还是巧合呢&#xff09;重启&…

centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息

https://www.cnblogs.com/zy-plan/p/8617202.html 1.系统 1.1版本 uname -a 能确认是64位还是32位&#xff0c;其它的信息不多 [rootlocalhost ~]# uname -a Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 G…

基于PCA降维的模式识别系统的设计与实现

基于PCA降维的模式识别系统的设计与实现 1.1 主要研究内容 (1)工作的主要描述 本次作业的主要目的是结合课内课外所学知识设计一个简单的模式识别系统对电离层公开数据进行分类、通过主成分分析(PCA)特征提取方法探索降维对分类性能的影响并学习一些常见分类器的基本原理…

统计机器翻译(SMT)工具Moses在Ubuntu上的安装及使用(安装篇)

统计机器翻译&#xff08;SMT&#xff09;工具Moses在Ubuntu上的安装及使用&#xff08;安装篇&#xff09; 前言Ubuntu配置1、关闭系统自动休眠&#xff08;可选&#xff09;2、更换软件源 Moses安装1、安装相关依赖包&#xff1a;2、检查gcc和g的版本3、新建Moses的工作目录和…

[LiteratureReview]A Collaborative Visual SLAM Framework for Service Robots

Reference&#xff1a;作者来自中科院自动化所和Intel中国&#xff0c;通信作者是史雪松博士&#xff08;复旦博士&#xff0c;现为高仙机器人SLAM算法总监&#xff0c;其曾在intel研究院担任主任研究员&#xff0c;OpenLORIS系列数据集作者&#xff0c;IROS2019Lifelong Robot…