![B4068 [GESP202412 四级] Recamán 题解](http://pic.xiahunao.cn/yaotu/B4068 [GESP202412 四级] Recamán 题解)
题目描述小杨最近发现了有趣的 Recamán 数列这个数列是这样生成的数列的第一项 a1 是 1如果 ak−1−k 是正整数并且没有在数列中出现过那么数列的第 k 项 ak 为 ak−1−k否则为 ak−1k。小杨想知道 Recamán 数列的前 n 项从小到大排序后的结果。手动计算非常困难小杨希望你能帮他解决这个问题。输入格式第一行一个正整数 n。输出格式一行n 个空格分隔的整数表示 Recamán 数列的前 n 项从小到大排序后的结果。输入输出样例输入 #1复制5输出 #1复制1 2 3 6 7输入 #2复制8输出 #2复制1 2 3 6 7 12 13 20说明/提示样例解释对于样例 1n5a11a1−2−1不是正整数因此 a2a123a2−30不是正整数因此 a3a236a3−42是正整数且没有在数列中出现过因此 a4a3−42a4−5−3不是正整数因此 a5a457。a1,a2,a3,a4,a5 从小到大排序的结果为 1,2,3,6,7。数据范围对于所有数据点保证 1≤n≤3000。AC代码#include bits/stdc.h using namespace std; int a[300005],s[120005]; int main() { int n; cinn; for(int i1;in;i){ if(a[i-1]-i0!s[a[i-1]-i]){ a[i]a[i-1]-i; } else{ a[i]a[i-1]i; } s[a[i]]1; } sort(a1,an1); for(int i1;in;i){ couta[i] ; } return 0; }