2022年CSP-J2复赛试题
__SECTIONS__:[{"name": "编程题", "count": 4}] 从PDF导入:2022年CSP-J2复赛试题
C++
210分钟
总分 400.0
4 题
试卷题目预览
第1题
中级
100.0分
编程
乘方(pow)
小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 a 和 b,求 a^b 的值。
因为 a^b 的值可能非常大,如果 a^b > 10^9,则输出 -1。
注意:a^b 表示 a 的 b 次方。
【输入格式】
从文件 pow.in 中读入数据。 输入一行包含两个正整数 a 和 b,含义如题所述。
【输出格式】
输出到文件 pow.out 中。 输出一行,如果 a^b ≤ 10^9,则输出 a^b 的值,否则输出 -1。
【样例】
10 9 2 30
【样例解释】
1000000000 -1
第2题
中级
100.0分
编程
解密(decode)
给定一个正整数 k,有 k 次询问,每次给定三个正整数 n, e, d,要求输出正整数 p, q 使得:
n = p × q
e × d = (p-1)(q-1) + 1
数据保证一定有解。
【输入格式】
从文件 decode.in 中读入数据。 输入第一行包含一个正整数 k,表示询问次数。 接下来 k 行,每行三个正整数 n, e, d。
【输出格式】
输出到文件 decode.out 中。 输出 k 行,每行两个正整数 p, q,其中 p ≤ q。
【样例】
3 242 3 31 1829 5 331 16151 7 1499
【样例解释】
11 22 3 610 17 949
第3题
中级
100.0分
编程
逻辑表达式(expr)
给定一个逻辑表达式,计算该表达式的值,并统计 & 和 | 短路运算的次数。
逻辑表达式的定义:
1. 0 和 1 是逻辑表达式,其值分别为 0 和 1。
2. 如果 A 和 B 是逻辑表达式,则 (A&B) 和 (A|B) 也是逻辑表达式,其中 & 表示逻辑与,| 表示逻辑或。
3. 短路运算:
- 对于 A&B,如果 A 的值为 0,则整个表达式的值为 0,不需要计算 B 的值(称为 & 短路)。
- 对于 A|B,如果 A 的值为 1,则整个表达式的值为 1,不需要计算 B 的值(称为 | 短路)。
【输入格式】
从文件 expr.in 中读入数据。 输入一行一个字符串,表示给定的逻辑表达式。
【输出格式】
输出到文件 expr.out 中。 输出三行: 第一行输出逻辑表达式的值(0 或 1)。 第二行输出 & 短路运算的次数。 第三行输出 | 短路运算的次数。
【样例】
0&(1|0)|(1|1|1&0) (0|1&0|1|1|(1|1))&(0&1&(1|0)|0|1|0)&0
【样例解释】
1 1 2 0 2 3
第4题
中级
100.0分
编程
上升点列(point)
给定 n 个点的坐标 (xi, yi),以及 m 个可添加的虚拟点。
要求选出一些点(包括给定点和虚拟点),使得这些点构成一个序列,满足:
1. 序列中相邻两点在平面直角坐标系上必须相邻,即它们在 x 轴或 y 轴方向上的距离恰好为 1。
2. 序列中的点必须按 x 坐标和 y 坐标都不减的顺序排列(即上升序列)。
问:最多能选出多少个点构成满足条件的序列?
【输入格式】
从文件 point.in 中读入数据。 输入的第一行包含两个正整数 n, m,分别表示给定点数和可添加虚拟点数。 接下来 n 行,每行包含两个正整数 xi, yi,表示第 i 个点的坐标。
【输出格式】
输出到文件 point.out 中。 输出一行一个整数,表示最长序列的点数。
【样例】
5 2 2 1 3 1 5 4 4 5 5 5 8 3 1 1 1 2 1 3 2 1 2 3 3 1 3 2 3 3
【样例解释】
5 8