[poj1833 排列]求數列的全排列中的後k項
Time Limit: 1000MS | Memory Limit: 30000K |
Total Submissions: 16791 | Accepted: 6719 |
Description
題目描述:大家知道,給出正整數n,則1到n這n個數可以構成n!種排列,把這些排列按照從小到大的順序(字典順序)列出,如n=3時,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六個排列。
任務描述:
給出某個排列,求出這個排列的下k個排列,如果遇到最後一個排列,則下1排列為第1個排列,即排列1 2 3…n。
比如:n = 3,k=2 給出排列2 3 1,則它的下1個排列為3 1 2,下2個排列為3 2 1,因此答案為3 2 1。
Input
Output
對於每組輸入資料,輸出一行,n個數,中間用空格隔開,表示輸入排列的下k個排列。Sample Input
3 3 1 2 3 1 3 1 3 2 1 10 2 1 2 3 4 5 6 7 8 9 10
Sample Output
3 1 2 1 2 3 1 2 3 4 5 6 7 9 8 10
Source
[email protected]題目沒意思。只是為了測一下一個所謂的快速輸出。根據大家的直覺,這個快速輸出一定沒有Printf直接列印整數快,而且cout肯定沒有printf快。但是本例可以看出,poj還真是有一點奇葩,輸入直接上讀入外掛,這個應該是沒有問題的。輸出部分,printf超時,cout500ms,遞迴putchar列印47ms...
Accepted | 324K | 47MS | G++ | 799B |
#include <cstdio> #include <algorithm> using namespace std; const int MAX = 10240; int a[MAX]; inline int read() { char ch; while ((ch = getchar()) < '0' || ch > '9'); int x = ch - '0'; while ((ch = getchar()) >= '0' && ch <= '9') { x = (x << 3) + (x << 1) + ch - '0'; } return x; } void Print(int x) { if (x == 0) return; Print(x / 10); putchar(x % 10 + '0'); } int main() { int m, n, k; m = read(); while (m--) { //scanf(" %d %d", &n, &k); n = read(); k = read(); for (int i = 0; i < n; ++i) a[i] = read();//scanf(" %d", a + i); while (k--) next_permutation(a, a + n); Print(a[0]);//printf("%d", a[0]); for (int i = 1; i < n; ++i) { putchar(' '); Print(a[i]); //printf(" %d", a[i]); } putchar('\n'); } return 0; }
這你也信?!!
相關推薦
[poj1833 排列]求數列的全排列中的後k項
排列 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16791 Accepted: 6719 Description 題目描述: 大家知道,給出正整數n,則1到n這n個數可以構成n!種排列,把這
暴力求解法中的列舉排列,生成全排列
**對於一個長度為n陣列長度的陣列={0,1,2,3,..., n-1}。要想列舉它的所有的長度為n的全排列出來。** 有兩種選擇:一個是直接列舉, 另外一個是使用遞迴來構造。 先說最容易理解的直接列舉。 例如當 n=5 的時候,我們生成的排列從小到
給定樹的後序和中序排列求先序排列
問題描述 給出一棵二叉樹的中序與後序排列。求出它的先序排列。(約定樹結點用不同的大寫字母表示,長度<=8)。輸入格式 兩行,每行一個字串,分別表示中序和後序排列輸出格式 一個字串,表示所求先序排列 樣例輸入 BADC BDCA樣例輸出 ABCD演
求字串全排列 python實現
演算法思想 輸入一個字串,列印這個字串中字元的全排列。 eg: 輸入:abc 輸出:abc acb bac bca cab cba 思路:將求字串的全排列分解為兩步: 第一步是確定第一個位置的字元,就
CF 303A(Lucky Permutation Triple-打表-數列全排列)
A. Lucky Permutation Triple time limit per test 2 seconds memory limit per test 256 megabyt
下一排列問題(全排列暴力)
A Number PuzzleTime Limit: 1000 ms /Memory Limit: 32768 kbDescriptionLele 最近上課的時候都很無聊,所以他發明了一個數字遊戲來打發時間。這個遊戲是這樣的,首先,他拿出幾張紙片,分別寫上0到9之間的任意數字
有重複元素的排列問題//利用全排列函式
題目描述 設R={r1,r2,……,rn}是要進行排列的n個元素。其中元素r1,r2,……,rn可能相同。使設計一個演算法,列出R的所有不同排列。 給定n以及待排列的n個元素。計算出這n個元素的所有不同排列。 輸入輸出格式 輸入格式: 第1行:元素個數n(1<=n&
排列組合之全排列 (輸入一個字串,輸出該字串包含的字元的所有組合)
因為專案需求,要用到全排列,在此記錄下來。全排列公式: f(n) = n! (n>=0) 此demo為,輸入一個字串,遍歷字串中每個字元,並組成一個新的字串。通過遞迴演算法,得到所有字
演算法基礎:排列組合問題-全排列(Golang實現)
【排列組合問題】 一共N輛火車(0<N<10),每輛火車以數字1-9編號,要求以字典序排序輸出火車出站的序列號。 輸入: 包括N個正整數(0<N<10),範圍為1到9,數字之間用空格分割,字串首位不包含空格。 輸出: 輸出以字典
演算法12--topK求一個數組中第k大的數
求一個數組中第k大的值 解法一: 建立一個k個元素的最大堆,首先將陣列中前k個元素放入堆中,此時堆頂元素為第k大的元素,後面繼續遍歷陣列,比較堆頂元素與陣列中元素值,當陣列中元素小於堆頂元素時,將堆頂元素彈出,新元素入堆,這樣最終堆頂元素即為第k大。 可以直接利用Jav
求一個數組中第k大的數,要求不能另外申請空間,陣列順序不能被改變
這是一道今日頭條的面試題,當面試官提出這樣一道題目時。我想相信,大多數人都會這樣反應 1.是不是可以先排一下序,然後再求第k大的,然後就想到陣列順序不能被改變,然後否定了 2.是不是可以用小堆來做。我建立一個堆大小為k的小堆,然後把這些資料全部扔進小堆中,除了堆頂,其他的數
求一個無序陣列中第K小問題
這種問題如果先排序,那麼至少時間複雜度為O(nlogn) 但是有種方法可以達到O(n) 這種方法有個闕值,只有大於44的時候用這種方法才比先排序後查詢的快 首先上一段虛擬碼吧 if(N<44) then 排序A return A[K]; ---O(1) else
格雷碼、全排列、約瑟夫環、m個元素中求n個元素的所有集合
格雷碼: 格雷碼是指,通過0-1的串來求出對應位數的所有可能。例如2的格雷碼:00、01、10、11 //格雷碼 例如2:00 01 10 11 void print(vector<int> &veNum) { for (int i = 1; i
二叉樹的中序後序排列求先序/先序中序排列求後序
7-8 根據後序和中序遍歷輸出先序遍歷 (25 分) 本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。 輸入格式: 第一行給出正整數N(≤30),是樹中結點的個數。隨後兩行,每行給出N個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔
求先序排列(二叉樹已知中序和後序,求先序)
ostream ble sta EDA 題目 sam test c++ adc 問題 A: [2001_p3]求先序排列 時間限制: 1 Sec 內存限制: 125 MB提交: 90 解決: 73 題目描述 給出一棵二叉樹的中序與後序排列。求出它的先序排列
數列還原(全排列)
for rip 幫助 個數字 item [0 str pan subject 題目描述 牛牛的作業薄上有一個長度為 n 的排列 A,這個排列包含了從1到n的n個數,但是因為一些原因,其中有一些位置(不超過 10 個)看不清了,但是牛牛記得這個數列順序對的數量是 k,順序對是
牛客網NowCoder 2018年全國多校算法寒假訓練營練習比賽(第四場)A.石油采集(dfs) B.道路建設(最小生成樹prim) C.求交集(暴力) F.Call to your teacher(迪傑斯特拉亂用) H.老子的全排列呢(dfs)
初始 -o 地圖 意義 技術 tle bject ios urn 菜哭了。。。 A.石油采集 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32768K,其他語言65536K 64bit IO Format: %lld 鏈
如何求先序排列和後序排列——hihocoder+洛谷例題【二叉樹遞歸搜索】
define second [] tor 記錄 例題 .com 內存限制 行為 【已知先序、中序求後序排列】: [#1049 : 後序遍歷](http://hihocoder.com/problemset/problem/1049) 時間限制:10000ms 單點時限:1
C++中全排列函式next_permutation 用法
全排列參考了兩位的部落格 感謝! http://blog.sina.com.cn/s/blog_9f7ea4390101101u.html http://blog.csdn.net/ac_gibson/article/details/45308645 早就聽說了了next_per
牛客網 之 數列還原(數列的全排列演算法)
題目描述 牛牛的作業薄上有一個長度為 n 的排列 A,這個排列包含了從1到n的n個數,但是因為一些原因,其中有一些位置(不超過 10 個)看不清了,但是牛牛記得這個數列順序對的數量是 k,順序對是指滿足 i < j 且 A[i] < A[j] 的對