CCF GESP 2024年12月认证 C++ 4级
三
编程题
第 1 题
Recamán
题目描述
小杨最近发现了有趣的 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 题
字符排序
题目描述
小杨有 $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。
编程题部分已到底了。