題目大意是給出乙個n個數字的排列,求出所有n個數的排列中,字典序(排列中每個數看作乙個字元)
位於給出的排列前k個的那個排列。
演算法思想:把第i個排列和整數對應起來,只需要把給定排列的對應整數編號計算出來,把它減去k,再
求出這個編號所對應的排列即可。
**如下:
#include#include//using namespace std;
/*前k個排列問題
對映與逆對映問題(o(n))
演算法思想:把給出的排列對應的整數計算出來
把它減去k 再求出此編碼所對應的排列即可。
具體演算法:採用「康托展開」把乙個排列對應
的字典排序的位置計算出來,也叫「字典法」
假設n=3 字典序列出來就是:
1,2,3;(1) 1,3,2;(2)
2,1,3;(3) 2,3,1;(4)
3,1,2;(5) 3,2,1;(6)
共計6種排列方式
*////由於對應的整數太大,採用64位整數表示
typedef _int64 int64;
//a是輸入排列,同時儲存輸出的結果
int a[35],i,n,k;
///p用來儲存可變進製數的每一位權值
int64 s,p[35];
//獲取排列a對應的編號
int64 get_per(int *a)//for
return ret;
}
///根據乙個整數key構造出對應的排列s
void set_per(int *a,int64 key)//for
a[i]=j;//設定第i位的數字為j
h[j]=1;//設定第j位被占用
}//for }
int main()
else
輸出處理,是否為空格還是換行
for(i=0;i
中山大學C 語言程式設計
cxsj01.csf cxsj02.csf cxsj03.csf cxsj04.csf cxsj05.csf cxsj06.csf cxsj07.csf cxsj08.csf cxsj09.csf cxsj10.csf cxsj11.csf cxsj12.csf cxsj13.csf cxsj14....
中山大學sicily第1813題
下面是我寫的1813題的 提交結果總是wrong answer,卻怎麼也找不錯來。請各位幫忙。中大sicily第1813題題目在http soj.me show problem.php?pid 1813 cid include include include using namespace std ...
2019中山大學程式設計競賽
theme 給定n m矩陣,有p個操作 將以 x1,y1 x2,y2 為左上 右下的矩陣覆蓋。之後q次詢問 以 x1,y1 x2,y2 為左上 右下的矩陣是否有全被覆蓋?solution 二維字首和。先由一次字首和 差分 計算出每個格仔被覆蓋的次數之和。然後將不為0的值 置為1,再進行字首和就算出每...