2023年CSP-S2复赛试题

__SECTIONS__:[{"name": "编程题", "count": 4}] 从PDF导入:2023年CSP-S2复赛试题

C++ 240分钟 总分 400.0 4 题
试卷题目预览
第1题 中级 100.0分 编程
密码锁(lock)

小 Y 有一把密码锁,密码由 5 个拨圈组成,每个拨圈有 0~9 共 10 个数字。
密码锁的每个拨圈可以向相邻的位置转动。具体地,第 i 个拨圈可以从当前数字 di 转动到 (di+1) mod 10 或 (di-1+10) mod 10。
此外,密码锁还有一个特殊功能:相邻的两个拨圈可以同时转动,即第 i 和第 i+1 个拨圈可以同时转动一个数字。
现在小 Y 看到了 n 个密码状态,他想知道有多少种可能的密码。

【输入格式】
从文件 lock.in 中读入数据。
输入的第一行包含一个正整数 n,表示看到的密码状态数量。
接下来 n 行,每行包含 5 个整数,表示一个密码状态。
【输出格式】
输出到文件 lock.out 中。
输出一行一个整数,表示可能的密码数量。
【样例】
1
0 0 0 0 0
【样例解释】
81
第2题 中级 100.0分 编程
消消乐(game)

小 S 有一个长度为 n 的字符串,仅包含小写字母。
字符串的消除规则如下:相邻的两个相同字符可以同时消除,消除后字符串会自动拼接。
问有多少个连续子串可以通过消除操作最终变成空串。

【输入格式】
从文件 game.in 中读入数据。
输入的第一行包含一个正整数 n,表示字符串长度。
输入的第二行包含一个长度为 n 的字符串,仅包含小写字母。
【输出格式】
输出到文件 game.out 中。
输出一行一个整数,表示可以完全消除的连续子串数量。
【样例】
8
abccbaab
【样例解释】
5
第3题 中级 100.0分 编程
结构体(struct)

小 Y 正在学习 C++ 中的结构体。在 C++ 中,结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。
现在小 Y 需要实现一个简化版的结构体系统,支持以下操作:
1. 定义一个新的结构体类型,包含若干成员变量。
2. 定义一个变量,给定类型和名称,输出该变量的起始地址。
3. 给定一个变量的访问路径,输出该成员的地址。
4. 给定一个地址,输出对应的变量访问路径。
注意:变量的内存分配需要按照内存对齐的规则进行。

【输入格式】
从文件 struct.in 中读入数据。
输入的第一行包含一个正整数 m,表示操作数量。
接下来 m 行,每行描述一个操作。
【输出格式】
输出到文件 struct.out 中。
对于每个操作 2, 3, 4,输出一行一个结果。
【样例】
5
1 a 2
byte 1
int 2
2 a x
4 0
【样例解释】
12 4
0
x.1
第4题 中级 100.0分 编程
种树(tree)

小 Y 有一棵包含 n 个节点的树,节点编号为 1 到 n,其中 1 号节点为根节点。
小 Y 计划在这棵树上种树。在第 i 天,小 Y 会在某个节点种一棵树。每天只能在一个节点种一棵树,且必须从第 1 天连续种到第 n 天。
每个节点都有一个目标高度 ai。节点 i 的树每天的增长值为 bi + ci × d,其中 d 是从种树开始经过的天数。
问最少需要多少天,才能让所有节点的树的高度都达到或超过目标高度。

【输入格式】
从文件 tree.in 中读入数据。
输入的第一行包含一个正整数 n,表示树的节点数量。
接下来 n 行,每行包含三个整数 ai, bi, ci,分别表示节点 i 的目标高度、初始增长值和增长值变化量。
接下来 n-1 行,每行包含两个整数 u, v,表示一条边的两个端点。
【输出格式】
输出到文件 tree.out 中。
输出一行一个整数,表示最少需要的天数。
【样例】
3
10 1 1
10 2 1
10 3 1
1 2
2 3
【样例解释】
4
💬