Recamán
C++ GESP真题 四级 2024.12 #1
EXY-PG-0177
时间限制: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$。