CSP-J/S 2025 第二轮认证 入门级
CSP-J/S 2025 第二轮认证 入门级
- 场次:2025年11月
- 考试时长:210 分钟
- 满分:400 分
- 编译选项:
-O2 -std=c++14 -static - 题目来源:官方直发原件
注意事项(原卷照录)
考试时间:2025 年 11 月 1 日 08:30 ~ 12:00。
注意事项(请仔细阅读)
- 文件名(程序名和输入输出文件名)必须使用英文小写。
- main 函数的返回值类型必须是 int,程序正常结束时的返回值必须是 0。
- 若无特殊说明,结果的比较方式为全文比较(过滤行末空格及文末换行)。
- 选手提交的程序源文件大小不得超过 100 KiB。
- 提交的程序源文件的放置位置请参考各省的具体要求。
- 程序可使用的栈空间内存限制与题目的内存限制一致。
- 禁止在源代码中改变编译器参数(如使用 #pragma 命令),禁止使用系统结构相关指令(如内联汇编)或其他可能造成不公平的方法。
- 因违反上述规定而出现的问题,申诉时一律不予受理。
- 只提供 Linux 格式附加样例文件。
- 全国统一评测时采用的机器配置为:Intel Core Ultra 9 285K CPU @ 3.70 GHz(关闭睿频与能效核),内存 96 GB。上述时限以此配置为准。
- 评测在当前最新公布的 NOI Linux 下进行,各语言的编译器版本以此为准。
编程题
本分区标题为平台补的结构性占位,原卷(来源件)未收录。
拼数
C++时间 1 s内存 512 MB 文件 IO:number.in → number.out
小 R 正在学习字符串处理。小 X 给了小 R 一个字符串 s,其中 s 仅包含小写英文字母及数字,且包含至少一个 1∼9 中的数字。小 X 希望小 R 使用 s 中的任意多个数字,按任意顺序拼成一个正整数。注意:小 R 可以选择 s 中相同的数字,但每个数字只能使用一次。例如,若 s 为 1a01b,则小 R 可以同时选择第 1,3,4 个字符,分别为 1,0,1,拼成正整数 101 或 110;但小 R 不能拼成正整数 111,因为 s 仅包含两个数字 1。
小 R 想知道,在他所有能拼成的正整数中,最大的是多少。你需要帮助小 R 求出他能拼成的正整数的最大值。
输入格式
从文件 number.in 中读入数据。
输入的第一行包含一个字符串 s,表示小 X 给小 R 的字符串。
输出格式
输出到文件 number.out 中。
输出一行一个正整数,表示小 R 能拼成的正整数的最大值。
样例
5
5
s 仅包含一个数字 5,因此小 R 仅能拼成正整数 5。
290es1q0
92100
s 包含数字 2,9,0,1,0。可以证明,小 R 拼成的正整数的最大值为 92100。
数据范围
设 ∣s∣ 为字符串 s 的长度。对于所有测试数据,保证:
- 1≤∣s∣≤106;
- s 仅包含小写英文字母及数字,且包含至少一个 1∼9 中的数字。
| 测试点编号 | ∣s∣≤ | 特殊性质 |
|---|---|---|
| 1 | 1 | A |
| 2 | 2 | A |
| 3 | 2 | 无 |
| 4 | 10 | A |
| 5,6 | 10 | 无 |
| 7,8 | 102 | A |
| 9∼11 | 102 | 无 |
| 12 | 103 | A |
| 13,14 | 103 | 无 |
| 15 | 105 | A |
| 16,17 | 105 | B |
| 18,19 | 105 | 无 |
| 20 | 106 | A |
| 21,22 | 106 | B |
| 23∼25 | 106 | 无 |
特殊性质 A:s 仅包含数字。
特殊性质 B:s 仅包含不超过 103 个数字。
部分分
- 4 分
测试点 1:∣s∣≤1,特殊性质 A。
- 4 分
测试点 2:∣s∣≤2,特殊性质 A。
- 4 分
测试点 3:∣s∣≤2,无特殊性质。
- 4 分
测试点 4:∣s∣≤10,特殊性质 A。
- 8 分
测试点 5,6:∣s∣≤10,无特殊性质。
- 8 分
测试点 7,8:∣s∣≤102,特殊性质 A。
- 12 分
测试点 9∼11:∣s∣≤102,无特殊性质。
- 4 分
测试点 12:∣s∣≤103,特殊性质 A。
- 8 分
测试点 13,14:∣s∣≤103,无特殊性质。
- 4 分
测试点 15:∣s∣≤105,特殊性质 A。
- 8 分
测试点 16,17:∣s∣≤105,特殊性质 B。
- 8 分
测试点 18,19:∣s∣≤105,无特殊性质。
- 4 分
测试点 20:∣s∣≤106,特殊性质 A。
- 8 分
测试点 21,22:∣s∣≤106,特殊性质 B。
- 12 分
测试点 23∼25:∣s∣≤106,无特殊性质。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
座位
C++时间 1 s内存 512 MB 文件 IO:seat.in → seat.out
CSP-J 2025 第二轮正在进行。小 R 所在的考场共有 n×m 名考生,其中所有考生的 CSP-J 2025 第一轮成绩互不相同。所有 n×m 名考生将按照 CSP-J 2025 第一轮的成绩,由高到低蛇形分配座位,排列成 n 行 m 列。具体地,设小 R 所在的考场的所有考生的成绩从高到低分别为 s1>s2>⋯>sn×m,则成绩为 s1 的考生的座位为第 1 列第 1 行,成绩为 s2 的考生的座位为第 1 列第 2 行,……,成绩为 sn 的考生的座位为第 1 列第 n 行,成绩为 sn+1 的考生的座位为第 2 列第 n 行,……,成绩为 s2n 的考生的座位为第 2 列第 1 行,成绩为 s2n+1 的考生的座位为第 3 列第 1 行,以此类推。
例如,若 n=4,m=5,则所有 4×5=20 名考生将按照 CSP-J 2025 第一轮成绩从高到低的顺序,根据下图中的箭头顺序蛇形分配座位。

给定小 R 所在的考场座位的行数 n 与列数 m,以及小 R 所在的考场的所有考生 CSP-J 2025 第一轮的成绩 a1,a2,…,an×m,其中 a1 为小 R CSP-J 2025 第一轮的成绩,你需要帮助小 R 求出,他的座位为第几列第几行。
输入格式
从文件 seat.in 中读入数据。
输入的第一行包含两个正整数 n,m,分别表示小 R 所在的考场座位的行数与列数。
输入的第二行包含 n×m 个正整数 a1,a2,…,an×m,分别表示小 R 所在的考场的所有考生 CSP-J 2025 第一轮的成绩,其中 a1 为小 R CSP-J 2025 第一轮的成绩。
输出格式
输出到文件 seat.out 中。
输出一行两个正整数 c,r,表示小 R 的座位为第 c 列第 r 行。
样例
2 2 99 100 97 98
1 2
按照成绩从高到低的顺序,成绩为 100 的考生的座位为第 1 列第 1 行,成绩为 99 的考生的座位为第 1 列第 2 行,成绩为 98 的考生的座位为第 2 列第 2 行,成绩为 97 的考生的座位为第 2 列第 1 行。小 R 的成绩为 99,因此座位为第 1 列第 2 行。
2 2 98 99 100 97
2 2
按照成绩从高到低的顺序,成绩为 100 的考生的座位为第 1 列第 1 行,成绩为 99 的考生的座位为第 1 列第 2 行,成绩为 98 的考生的座位为第 2 列第 2 行,成绩为 97 的考生的座位为第 2 列第 1 行。小 R 的成绩为 98,因此座位为第 2 列第 2 行。
3 3 94 95 96 97 98 99 100 93 92
3 1
数据范围
对于所有测试数据,保证:
- 1≤n≤10,1≤m≤10;
- 对于所有 1≤i≤n×m,均有 1≤ai≤100,且 a1,a2,…,an×m 互不相同。
| 测试点编号 | n≤ | m≤ | 特殊性质 |
|---|---|---|---|
| 1 | 1 | 1 | AB |
| 2,3 | 1 | 10 | 无 |
| 4,5 | 10 | 1 | 无 |
| 6 | 2 | 2 | A |
| 7 | 2 | 2 | B |
| 8,9 | 2 | 2 | 无 |
| 10 | 2 | 10 | A |
| 11 | 2 | 10 | B |
| 12∼14 | 2 | 10 | 无 |
| 15∼17 | 10 | 2 | 无 |
| 18∼20 | 10 | 10 | 无 |
特殊性质 A:对于所有 1≤i≤n×m,均有 ai=i。
特殊性质 B:对于所有 1≤i≤n×m,均有 ai=n×m−i+1。
部分分
- 5 分
测试点 1:n≤1,m≤1,特殊性质 A、B。
- 10 分
测试点 2,3:n≤1,m≤10,无特殊性质。
- 10 分
测试点 4,5:n≤10,m≤1,无特殊性质。
- 5 分
测试点 6:n≤2,m≤2,特殊性质 A。
- 5 分
测试点 7:n≤2,m≤2,特殊性质 B。
- 10 分
测试点 8,9:n≤2,m≤2,无特殊性质。
- 5 分
测试点 10:n≤2,m≤10,特殊性质 A。
- 5 分
测试点 11:n≤2,m≤10,特殊性质 B。
- 15 分
测试点 12∼14:n≤2,m≤10,无特殊性质。
- 15 分
测试点 15∼17:n≤10,m≤2,无特殊性质。
- 15 分
测试点 18∼20:n≤10,m≤10,无特殊性质。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
异或和
C++时间 1 s内存 512 MB 文件 IO:xor.in → xor.out
小 R 有一个长度为 n 的非负整数序列 a1,a2,…,an。定义一个区间 [l,r] (1≤l≤r≤n) 的权值为 al,al+1,…,ar 的二进制按位异或和,即 al⊕al+1⊕⋯⊕ar,其中 ⊕ 表示二进制按位异或。
小 X 给了小 R 一个非负整数 k。小 X 希望小 R 选择序列中尽可能多的不相交的区间,使得每个区间的权值均为 k。两个区间 [l1,r1],[l2,r2] 相交当且仅当两个区间同时包含至少一个相同的下标,即存在 1≤i≤n 使得 l1≤i≤r1 且 l2≤i≤r2。
例如,对于序列 [2,1,0,3],若 k=2,则小 R 可以选择区间 [1,1] 和区间 [2,4],权值分别为 2 和 1⊕0⊕3=2;若 k=3,则小 R 可以选择区间 [1,2] 和区间 [4,4],权值分别为 1⊕2=3 和 3。
你需要帮助小 R 求出他能选出的区间数量的最大值。
输入格式
从文件 xor.in 中读入数据。
输入的第一行包含两个非负整数 n,k,分别表示小 R 的序列长度和小 X 给小 R 的非负整数。
输入的第二行包含 n 个非负整数 a1,a2,…,an,表示小 R 的序列。
输出格式
输出到文件 xor.out 中。
输出一行一个非负整数,表示小 R 能选出的区间数量的最大值。
样例
4 2 2 1 0 3
2
小 R 可以选择区间 [1,1] 和区间 [2,4],异或和分别为 2 和 1⊕0⊕3=2。可以证明,小 R 能选出的区间数量的最大值为 2。
4 3 2 1 0 3
2
小 R 可以选择区间 [1,2] 和区间 [4,4],异或和分别为 1⊕2=3 和 3。可以证明,小 R 能选出的区间数量的最大值为 2。
4 0 2 1 0 3
1
小 R 可以选择区间 [3,3],异或和为 0。可以证明,小 R 能选出的区间数量的最大值为 1。注意:小 R 不能同时选择区间 [3,3] 和区间 [1,4],因为这两个区间同时包含下标 3。
数据范围
对于所有测试数据,保证:
- 1≤n≤5×105,0≤k<220;
- 对于所有 1≤i≤n,均有 0≤ai<220。
| 测试点编号 | n≤ | k | 特殊性质 |
|---|---|---|---|
| 1 | 2 | =0 | A |
| 2 | 10 | ≤1 | B |
| 3 | 102 | =0 | A |
| 4,5 | 102 | ≤1 | B |
| 6∼8 | 102 | ≤255 | C |
| 9,10 | 103 | ≤255 | C |
| 11,12 | 103 | <220 | 无 |
| 13 | 2×105 | ≤1 | B |
| 14,15 | 2×105 | ≤255 | C |
| 16 | 2×105 | <220 | 无 |
| 17 | 5×105 | ≤255 | C |
| 18∼20 | 5×105 | <220 | 无 |
特殊性质 A:对于所有 1≤i≤n,均有 ai=1。
特殊性质 B:对于所有 1≤i≤n,均有 0≤ai≤1。
特殊性质 C:对于所有 1≤i≤n,均有 0≤ai≤255。
部分分
- 5 分
测试点 1:n≤2,k=0,特殊性质 A。
- 5 分
测试点 2:n≤10,k≤1,特殊性质 B。
- 5 分
测试点 3:n≤102,k=0,特殊性质 A。
- 10 分
测试点 4,5:n≤102,k≤1,特殊性质 B。
- 15 分
测试点 6∼8:n≤102,k≤255,特殊性质 C。
- 10 分
测试点 9,10:n≤103,k≤255,特殊性质 C。
- 10 分
测试点 11,12:n≤103,k<220,无特殊性质。
- 5 分
测试点 13:n≤2×105,k≤1,特殊性质 B。
- 10 分
测试点 14,15:n≤2×105,k≤255,特殊性质 C。
- 5 分
测试点 16:n≤2×105,k<220,无特殊性质。
- 5 分
测试点 17:n≤5×105,k≤255,特殊性质 C。
- 15 分
测试点 18∼20:n≤5×105,k<220,无特殊性质。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
多边形
C++时间 1 s内存 512 MB 文件 IO:polygon.in → polygon.out
小 R 喜欢玩小木棍。小 R 有 n 根小木棍,第 i (1≤i≤n) 根小木棍的长度为 ai。
小 X 希望小 R 从这 n 根小木棍中选出若干根小木棍,将它们按任意顺序首尾相连拼成一个多边形。小 R 并不知道小木棍能拼成多边形的条件,于是小 X 直接将条件告诉了他:对于长度分别为 l1,l2,…,lm 的 m 根小木棍,这 m 根小木棍能拼成一个多边形当且仅当 m≥3 且所有小木棍的长度之和大于所有小木棍的长度最大值的两倍,即 ∑i=1mli>2×maxi=1mli。
由于小 R 知道了小木棍能拼成多边形的条件,小 X 提出了一个更难的问题:有多少种选择小木棍的方案,使得选出的小木棍能够拼成一个多边形?你需要帮助小 R 求出选出的小木棍能够拼成一个多边形的方案数。两种方案不同当且仅当选择的小木棍的下标集合不同,即存在 1≤i≤n,使得其中一种方案选择了第 i 根小木棍,但另一种方案未选择。由于答案可能较大,你只需要求出答案对 998,244,353 取模后的结果。
输入格式
从文件 polygon.in 中读入数据。
输入的第一行包含一个正整数 n,表示小 R 的小木棍的数量。
输入的第二行包含 n 个正整数 a1,a2,…,an,表示小 R 的小木棍的长度。
输出格式
输出到文件 polygon.out 中。
输出一行一个非负整数,表示小 R 选出的小木棍能够拼成一个多边形的方案数对 998,244,353 取模后的结果。
样例
5 1 2 3 4 5
9
共有以下 9 种选择小木棍的方案,使得选出的小木棍能够拼成一个多边形:
- 选择第 2,3,4 根小木棍,长度之和为 2+3+4=9,长度最大值为 4;
- 选择第 2,4,5 根小木棍,长度之和为 2+4+5=11,长度最大值为 5;
- 选择第 3,4,5 根小木棍,长度之和为 3+4+5=12,长度最大值为 5;
- 选择第 1,2,3,4 根小木棍,长度之和为 1+2+3+4=10,长度最大值为 4;
- 选择第 1,2,3,5 根小木棍,长度之和为 1+2+3+5=11,长度最大值为 5;
- 选择第 1,2,4,5 根小木棍,长度之和为 1+2+4+5=12,长度最大值为 5;
- 选择第 1,3,4,5 根小木棍,长度之和为 1+3+4+5=13,长度最大值为 5;
- 选择第 2,3,4,5 根小木棍,长度之和为 2+3+4+5=14,长度最大值为 5;
- 选择第 1,2,3,4,5 根小木棍,长度之和为 1+2+3+4+5=15,长度最大值为 5。
5 2 2 3 8 10
6
共有以下 6 种选择小木棍的方案,使得选出的小木棍能够拼成一个多边形:
- 选择第 1,2,3 根小木棍,长度之和为 2+2+3=7,长度最大值为 3;
- 选择第 3,4,5 根小木棍,长度之和为 3+8+10=21,长度最大值为 10;
- 选择第 1,2,4,5 根小木棍,长度之和为 2+2+8+10=22,长度最大值为 10;
- 选择第 1,3,4,5 根小木棍,长度之和为 2+3+8+10=23,长度最大值为 10;
- 选择第 2,3,4,5 根小木棍,长度之和为 2+3+8+10=23,长度最大值为 10;
- 选择第 1,2,3,4,5 根小木棍,长度之和为 2+2+3+8+10=25,长度最大值为 10。
数据范围
对于所有测试数据,保证:
- 3≤n≤5,000;
- 对于所有 1≤i≤n,均有 1≤ai≤5,000。
| 测试点编号 | n≤ | maxi=1nai≤ |
|---|---|---|
| 1∼3 | 3 | 10 |
| 4∼6 | 10 | 102 |
| 7∼10 | 20 | 102 |
| 11∼14 | 500 | 102 |
| 15∼17 | 500 | 1 |
| 18∼20 | 5,000 | 1 |
| 21∼25 | 5,000 | 5,000 |
部分分
- 12 分
测试点 1∼3:n≤3,maxi=1nai≤10。
- 12 分
测试点 4∼6:n≤10,maxi=1nai≤102。
- 16 分
测试点 7∼10:n≤20,maxi=1nai≤102。
- 16 分
测试点 11∼14:n≤500,maxi=1nai≤102。
- 12 分
测试点 15∼17:n≤500,maxi=1nai≤1。
- 12 分
测试点 18∼20:n≤5,000,maxi=1nai≤1。
- 20 分
测试点 21∼25:n≤5,000,maxi=1nai≤5,000。
原文保真说明:原卷印刷错误 2 处(照原卷保留,未作修改)
原卷印刷如此其它数据范围
原卷作
| $15 \sim 17$ | $500$ | $1$ |原卷测试点表中该档 max a_i 上界印作单独一个 1(原件第 13 页,900 dpi 复核确认无上标、无千分位,文本层同样只有 1)。上界存疑但不与整体范围矛盾(所有木棍长度均为 1 时拼成条件退化为 m>2,是自洽的纯组合特例档),照录不改;下游不得据此改写为 10^3 / 1,000。
原卷印刷如此其它数据范围
原卷作
| $18 \sim 20$ | $5,000$ | $1$ |同上:该档 max a_i 上界亦印作单独一个 1,照录不改。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB