/blog/oi

CSP-J 2025 第二轮认证题目解析

本次CSP-J 前两题实在是太简单了,比 2024 年的简单了 预估分数线 $260pts$ 左右 T1 拼数 / number 题目描述 小 R 正在学习字符串处理。小 X 给了小 R 一个字符串 $s$,其中 $s$ 仅包含小写英文字母及数字,且包含至少一个 $1 \sim 9$ 中的数字。小 X 希望小 R 使用 $s$ 中的任意多个数字,按任意...

W WillZhong RichMan 14 views min read OI

本次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$。

OI
All articles
Comments

0 条讨论

Please sign in to join the conversation.

No comments yet. Be the first to share.