大家知道,給出正整數 nn,則 11 到 nn 這 nn 個數可以構成 n!n! 種排列,把這些排列按照從小到大的順序(字典順序)列出,如 n=3n=3 時,列出 \text1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1 六個排列。
蒜頭君給出某個排列,求出這個排列的下 kk 個排列,如果遇到最後乙個排列,則下 11 排列為第 11 個排列,即排列 1 2 3…n123…n。
比如:n = 3n=3,k=2k=2 給出排列 \text2 3 1,則它的下 11 個排列為 \text3 1 2,下 22 個排列為 \text3 2 1,因此答案為 \text3 2 1。
輸入格式
第一行是乙個正整數 mm,表示測試資料的個數,下面是 mm 組測試資料,每組測試資料第一行是 22 個正整數 nn( 1 \le n < 10241≤n<1024) 和 k(1 \le k \le 64)k(1≤k≤64),第二行有 nn 個正整數,是 1, 2 … n1,2…n 的乙個排列。
輸出格式
對於每組輸入資料,輸出一行,nn 個數,中間用空格隔開,表示輸入排列的下 kk 個排列。
輸出時每行末尾的多餘空格,不影響答案正確性
樣例輸入複製
33 1
2 3 1
3 13 2 1
10 2
1 2 3 4 5 6 7 8 9 10
樣例輸出複製
3 1 2
1 2 3
1 2 3 4 5 6 7 9 8 10
主要可以練習下全排列函式 next_permutation();
#include
#include
using
namespace std;
int m,n,k;
int a[
10000];
intmain
(void
)while
(k--
)for
(int i =
0;i < n;i++
) cout<}return0;
}
計蒜客 排序
計蒜客 排序 你需要分析排序演算法,將 n nn 個互不相同的整數,通過交換兩個相鄰的元素使得數列有序的 最少交換次數。比如,原數列為 9,1 0,5 49,1,0,5,4 9,1,0,5,4 排序後的數列為 0,1 4,5 90,1,4,5,9 0,1,4,5,9。輸入格式 第一行乙個整數 n n...
計蒜客 字母排序
題目描述 例如我們正常的字母排列順序是abcdefg xyz,代表a b c x y z abcd efg hhh ihg四個字串的最長不降子串行的長度分別為4 3 3 1 輸入格式 第1,2行為字串含義如題描述 輸出格式 輸出答案含義如題描述 1 第二行長度 255 樣例輸入 abcdefghij...
計蒜客 成績排序
計蒜客 成績排序 小蒜給出了班裡某門課程的成績單,請你按成績從高到低對成績單排序輸出,如果有相同分數則名字字典序小的在前。輸入格式 第一行為 n 0 n 20 表示班裡的學生數目 接下來的 n行,每行為每個學生的名字和他的成績,中間用單個空格隔開。名字只包含字母且長度不超過 20,成績為乙個不大於 ...