CCF GESP 2024年12月认证 C++ 4级

编程题
共 2 道 每题 25 分 共计 50 分
第 1 题
Recamán
时间限制:1s 内存限制:512MB

题目描述

小杨最近发现了有趣的 Recamán 数列,这个数列是这样生成的:

  • 数列的第一项 $a_1$ 是 $1$;
  • 如果 $a_{k-1}-k$ 是正整数并且没有在数列中出现过,那么数列的第 $k$ 项 $a_k$ 为 $a_{k-1}-k$,否则为 $a_{k-1}+k$。

小杨想知道 Recamán 数列的前 $n$ 项从小到大排序后的结果。手动计算非常困难,小杨希望你能帮他解决这个问题。

输入格式

第一行,一个正整数 $n$。

输出格式

一行,$n$ 个空格分隔的整数,表示 Recamán 数列的前 $n$ 项从小到大排序后的结果。

样例说明

样例 1

输入:
5
输出:
1 2 3 6 7

样例 2

输入:
8
输出:
1 2 3 6 7 12 13 20
样例解释:

对于样例 1,$n=5$:

  • $a_1​=1$;
  • $a_1−2=−1$,不是正整数,因此 $a_2​​=a_1​​+2=3$;
  • $a_2​−3=0$,不是正整数,因此 $a_3​=a_2​+3=6$;
  • $a_3​−4=2$,是正整数,且没有在数列中出现过,因此 $a_4​=a_3​−4=2$;
  • $a_4​​−5=−3$,不是正整数,因此 $a_5​​=a_4​​+5=7$。

$a_1​,a_2​,a_3​,a_4​,a_5$​​ 从小到大排序的结果为 $1,2,3,6,7$。

数据范围

对于所有数据点,保证 $1\le n\le 3\, 000$。

第 2 题
字符排序
时间限制:1s 内存限制:512MB

题目描述

小杨有 $n$ 个仅包含小写字母的字符串 $s_1,s_2,\ldots,s_n$,小杨想将这些字符串按一定顺序排列后拼接到一起构成字符串 $t$。小杨希望最后构成的字符串 $t$ 满足:

  • 假设 $t_i$ 为字符串 $t$ 的第 $i$ 个字符,对于所有的 $j\lt i$ 均有 $t_j\le t_i$。两个字符的大小关系与其在字母表中的顺序一致,例如 $\texttt{e}\lt \texttt{g}\lt \texttt{p} \lt \texttt{s}$。

小杨想知道是否存在满足条件的字符串排列顺序。

输入格式

第一行包含一个正整数 $T$,代表测试数据组数。

对于每组测试数据,第一行包含一个正整数 $n$,含义如题面所示。

之后 $n$ 行,每行包含一个字符串 $s_i$。

输出格式

对于每组测试数据,如果存在满足条件的排列顺序,输出(一行一个)$\texttt{1}$,否则输出(一行一个) $\texttt{0}$。

样例说明

样例 1

输入:
3
3
aa
ac
de
2
aac
bc
1
gesp
输出:
1
0
0
样例解释:

对于第一组测试数据,一种可行的排列顺序为 aa+ac+de,构成的字符串 t 为 aaacde,满足条件。

数据范围

对于全部数据,保证有 $1≤t,n≤100$,每个字符串的长度不超过 10。

编程题部分已到底了。