本次CSP-J 前两题实在是太简单了,比 2024 年的简单了
预估分数线 $260pts$ 左右
T1 拼数 / number
题目描述
小 R 正在学习字符串处理。小 X 给了小 R 一个字符串 $s$,其中 $s$ 仅包含小写英文字母及数字,且包含至少一个 $1 \sim 9$ 中的数字。小 X 希望小 R 使用 $s$ 中的任意多个数字,按任意顺序拼成一个正整数。注意:小 R 可以选择 $s$ 中相同的数字,但每个数字只能使用一次。例如,若 $s$ 为 $\tt 1a01b$,则小 R 可以同时选择第 $1,3,4$ 个字符,分别为 $1,0,1$,拼成正整数 $101$ 或 $110$;但小 R 不能拼成正整数 $111$,因为 $s$ 仅包含两个数字 $1$。小 R 想知道,在他所有能拼成的正整数中,最大的是多少。你需要帮助小 R 求出他能拼成的正整数的最大值。
输入格式
输入的第一行包含一个字符串 $s$,表示小 X 给小 R 的字符串。
输出格式
输出一行一个正整数,表示小 R 能拼成的正整数的最大值。
输入输出样例 #1
输入 #1
5
输出 #1
5
输入输出样例 #2
输入 #2
290es1q0
输出 #2
92100
说明/提示
【样例 2 解释】
$s$ 包含数字 $2,9,0,1,0$。可以证明,小 R 拼成的正整数的最大值为 $92100$。
【样例 3】
见选手目录下的 $number/number3.in$ 与 $number/number3.ans$。该样例满足测试点 $9 \sim 11$ 的约束条件。
【样例 4】
见选手目录下的 $number/number4.in$ 与 $number/number4.ans$。该样例满足测试点 $20$ 的约束条件。
【数据范围】
设 $|s|$ 为字符串 $s$ 的长度。对于所有测试数据,保证: - $1 \leq |s| \leq 10^6$; - $s$ 仅包含小写英文字母及数字,且包含至少一个 $1 \sim 9$ 中的数字。
::cute-table{tuack}
| 测试点编号 | $\lvert s\rvert \leq$ | 特殊性质 |
|---|---|---|
| $1$ | $1$ | A |
| $2$ | $2$ | ^ |
| $3$ | ^ | 无 |
| $4$ | $10$ | A |
| $5,6$ | ^ | 无 |
| $7,8$ | $10^2$ | A |
| $9 \sim 11$ | ^ | 无 |
| $12$ | $10^3$ | A |
| $13,14$ | ^ | 无 |
| $15$ | $10^5$ | A |
| $16,17$ | ^ | B |
| $18,19$ | ^ | 无 |
| $20$ | $10^6$ | A |
| $21,22$ | ^ | B |
| $23 \sim 25$ | ^ | 无 |
- 特殊性质 A:$s$ 仅包含数字。
- 特殊性质 B:$s$ 仅包含不超过 $10^3$ 个数字。
解法
题目解析:
给出一个字符串,将其中的数字按照任意顺序排列组合成一个新数,求最大的新数
思路
这是一道非常简单的模拟思维题,注意到10进制数字的表达方式为
$ x = a \times 10^n + b \times 10^{n-1} + c \times 10^{n-2} ... m \times 1 $
可以知道要使这个数字尽可能的大,高位的系数要尽可能的大,所以去除其他字符后对数字进行排序即可
AC Code
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
string numstr;
for(char c : s){
if('0' <= c && c <= '9') numstr+=c;
}
sort(numstr.begin(), numstr.end(), greater <char> ());
cout << numstr;
}
T2 座位 / seat
题目描述
CSP-J 2025 第二轮正在进行。小 R 所在的考场共有 $n \times m$ 名考生,其中所有考生的 CSP-J 2025 第一轮成绩互不相同。所有 $n \times m$ 名考生将按照 CSP-J 2025 第一轮的成绩,由高到低蛇形分配座位,排列成 $n$ 行 $m$ 列。具体地,设小 R 所在的考场的所有考生的成绩从高到低分别为 $s_1 > s_2 > \dots > s_{n \times m}$,则成绩为 $s_1$ 的考生的座位为第 1 列第 $1$ 行,成绩为 $s_2$ 的考生的座位为第 $1$ 列第 $2$ 行,$\dots$,成绩为 $s_n$ 的考生的座位为第 $1$ 列第 $n$ 行,成绩为 $s_{n+1}$ 的考生的座位为第 $2$ 列第 $n$ 行,$\dots$,成绩为 $s_{2n}$ 的考生的座位为第 $2$ 列第 $1$ 行,成绩为 $s_{2n+1}$ 的考生的座位为第 $3$ 列第 $1$ 行,以此类推。
例如,若 $n = 4, m = 5$,则所有 $4 \times 5 = 20$ 名考生将按照 CSP-J 2025 第一轮成绩从高到低的顺序,根据下图中的箭头顺序分配座位。
:::align{center}
:::
给定小 R 所在的考场座位的行数 $n$ 与列数 $m$,以及小 R 所在的考场的所有考生 CSP-J 2025 第一轮的成绩 $a_1, a_2, \dots, a_{n \times m}$,其中 $a_1$ 为小 R CSP-J 2025 第一轮的成绩,你需要帮助小 R 求出,他的座位为第几列第几行。
输入格式
输入的第一行包含两个正整数 $n, m$,分别表示小 R 所在的考场座位的行数与列数。
输入的第二行包含 $n \times m$ 个正整数 $a_1, a_2, \dots, a_{n \times m}$,分别表示小 R 所在的考场的所有考生 CSP-J 2025 第一轮的成绩,其中 $a_1$ 为小 R CSP-J 2025 第一轮的成绩。
输出格式
输出一行两个正整数 $c, r$,表示小 R 的座位为第 $c$ 列第 $r$ 行。
输入输出样例 #1
输入 #1
2 2
99 100 97 98
输出 #1
1 2
输入输出样例 #2
输入 #2
2 2
98 99 100 97
输出 #2
2 2
输入输出样例 #3
输入 #3
3 3
94 95 96 97 98 99 100 93 92
输出 #3
3 1
说明/提示
【样例 1 解释】
按照成绩从高到低的顺序,成绩为 $100$ 的考生的座位为第 $1$ 列第 $1$ 行,成绩为 $99$ 的考生的座位为第 $1$ 列第 $2$ 行,成绩为 $98$ 的考生的座位为第 $2$ 列第 $2$ 行,成绩为 $97$ 的考生的座位为第 $2$ 列第 $1$ 行。小 R 的成绩为 $99$,因此座位为第 $1$ 列第 $2$ 行。
【样例 2 解释】
按照成绩从高到低的顺序,成绩为 $100$ 的考生的座位为第 $1$ 列第 $1$ 行,成绩为 $99$ 的考生的座位为第 $1$ 列第 $2$ 行,成绩为 $98$ 的考生的座位为第 $2$ 列第 $2$ 行,成绩为 $97$ 的考生的座位为第 $2$ 列第 $1$ 行。小 R 的成绩为 $98$,因此座位为第 $2$ 列第 $2$ 行。
【数据范围】
对于所有测试数据,保证: - $1 \leq n \leq 10$, $1 \leq m \leq 10$; - 对于所有 $1 \leq i \leq n \times m$,均有 $1 \leq a_i \leq 100$,且 $a_1, a_2, \dots, a_{n \times m}$ 互不相同。
::cute-table{tuack}
| 测试点编号 | $n \leq$ | $m \leq$ | 特殊性质 |
|---|---|---|---|
| $1$ | $1$ | $1$ | AB |
| $2, 3$ | ^ | $10$ | 无 |
| $4, 5$ | $10$ | $1$ | ^ |
| $6$ | $2$ | $2$ | A |
| $7$ | ^ | ^ | B |
| $8, 9$ | ^ | ^ | 无 |
| $10$ | ^ | $10$ | A |
| $11$ | ^ | ^ | B |
| $12 \sim 14$ | ^ | ^ | 无 |
| $15 \sim 17$ | $10$ | $2$ | ^ |
| $18 \sim 20$ | ^ | $10$ | ^ |
特殊性质 A:对于所有 $1 \leq i \leq n \times m$,均有 $a_i = i$。
特殊性质 B:对于所有 $1 \leq i \leq n \times m$,均有 $a_i = n \times m - i + 1$。
0 条讨论