【拾题杂谈】GYM100517B Bubble Sort
题面
题目描述
众所周知,排序算法冒泡排序可以用如下的伪代码表示出来
1 | define BubbleSort(a: array [1...n]) : |
我们把内部的一次循环称为冒泡迭代:
1 | define BubblePass(a: array [1...n]) : |
实际上,不是所有的 $n - 1$ 次冒泡迭代都会被冒泡排序执行,一些数组会在一定次数的冒泡迭代后变得有序。比如说,数组 $[2,1,3,4]$ 在一次冒泡迭代后就会变得有序。
其实有很多的数组都只会经过一次冒泡迭代就变得有序,比如说由区间 $[1,3]$ 组成的数组的数字的 $6$ 个全排列中有 $4$ 个都只需要一次冒泡迭代就可以变得有序。我们将区间 $[1,n]$ 组成的数组的全排列中只需要经过一次冒泡迭代的数量称为 $B(n)$ 。
给出 $n,k$ 你需要求出由区间 $[1,n]$ 组成的数组的全排列中按字典序排序的第 $k$ 个只需要一次冒泡迭代就可以变得有序的排列。
输入格式
此题含有多组数据输入。
每一组数据只有一行两个数字 $n,k$ 含义如题面 $(1\le n\le10^5,1\le k\le 5\times 10^{18})$ 其中 $k$ 不超过 $B(n)$ 。
最后一行,输入两个零表示读入结束。
总共的数据组数不超过 $10^6$ 。
输出格式
对于每一组数据输出一行 $n$ 个数字 —— 由区间 $[1,n]$ 组成的数组的全排列中按字典序排序的第 $k$ 个只需要一次冒泡迭代就可以变得有序的排列。
样例输入
1 | 3 1 |
样例输出
1 | 1 2 3 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 祝馀宫!
评论