题目背景
faebdc 和 zky 在玩一个小游戏
题目描述
zky 有 nn 个扑克牌,编号从 11 到 nn,zky 把它排成一个序列,每次把最上方的扑克牌放在牌堆底,然后把下一张扑克牌拿出来输出,最终输出的序列恰好是从 11 到 nn,faebdc 问你原序列是什么,因为 faebdc 神犇早已在 \mathcal O (1)O(1) 的时间得出结果,如果你在 1 s 内答不出来,faebdc 会吃了你。
输入格式
一个整数 n,表示扑克数目。
输出格式
nn 个数,表示扑克序列。
输入输出样例
输入 #1复制
13
输出 #1复制
7 1 12 2 8 3 11 4 9 5 13 6 10
说明/提示
对于 100%100% 的数据,1 \le n \le {10}^61≤n≤10 6
解题思路:题意是给你答案序列,先从牌顶抽出一张并将其放在最下面,并打印输出下一张;我们可以反推,维护一个ans数组,让扑克牌从大到小遍历(不用开数组,更不用维护栈),每次递减的同时,先将n放到牌顶,再将最底部的牌放到牌顶:即
ans.push_back(n–);
ans.push_back(ans[pos++]);
并在n为0的时候退出循环。
打印结果时,从后向前打印,注意 i > ans.size()-1-n