码迷,mamicode.com
首页 > 其他好文 > 详细

逆康托展开

时间:2016-08-01 10:23:55      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <queue>
 5 #include <cstdio>
 6 #include <algorithm>
 7 #include <map>
 8 #define LL long long
 9 
10 using namespace std;
11 
12 void unCantor(int X,int n)
13 {
14     int a[20],num[20],used[20];
15     int fact[15];
16     memset(used,0,sizeof(used));
17     fact[0] = fact[1] = 1;
18     for(int i = 2; i <= 15; i++)
19         fact[i] = fact[i-1]*i;
20 
21     for(int i = 1; i <= n; i++)
22     {
23         a[i] = X/fact[n-i];
24         X %= fact[n-i];
25         int cnt = 0;
26         for(int j = 1; j <= n; j++)
27         {
28             if(!used[j])
29                 cnt = cnt+1;
30             if(cnt == a[i] + 1)
31             {
32                 num[i] = j;
33                 used[j] = 1;
34                 break;
35             }
36         }
37     }
38     for(int i = 1; i <= n; i++)
39         printf("%d%c",num[i],i == n?\n: );
40 }
41 
42 void solve()
43 {
44     int n,X;
45     scanf("%d %d",&X,&n);
46     unCantor(X,n);
47 }
48 
49 int main(void)
50 {
51     int t;
52     scanf("%d",&t);
53     while(t--)
54     {
55         solve();
56     }
57     return 0;
58 }

 

逆康托展开

标签:

原文地址:http://www.cnblogs.com/henserlinda/p/5724597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!