逆康托展开
2016-08-01 09:12
176 查看
#include <iostream> #include <cstdlib> #include <cstring> #include <queue> #include <cstdio> #include <algorithm> #include <map> #define LL long long using namespace std; void unCantor(int X,int n) { int a[20],num[20],used[20]; int fact[15]; memset(used,0,sizeof(used)); fact[0] = fact[1] = 1; for(int i = 2; i <= 15; i++) fact[i] = fact[i-1]*i; for(int i = 1; i <= n; i++) { a[i] = X/fact[n-i]; X %= fact[n-i]; int cnt = 0; for(int j = 1; j <= n; j++) { if(!used[j]) cnt = cnt+1; if(cnt == a[i] + 1) { num[i] = j; used[j] = 1; break; } } } for(int i = 1; i <= n; i++) printf("%d%c",num[i],i == n?'\n':' '); } void solve() { int n,X; scanf("%d %d",&X,&n); unCantor(X,n); } int main(void) { int t; scanf("%d",&t); while(t--) { solve(); } return 0; }
相关文章推荐
- 康托展开 及其逆运算
- 康托展开和逆康托展开的实现
- 康托展开
- 康托展开及其逆运算 详解
- 【BZOJ】3301: [USACO2011 Feb] Cow Line(康托展开)
- 康托展开
- sicily 2011. Nine Digits(广搜,康托展开)
- 康托展开
- [HDOJ1043]Eight(康托展开 BFS 打表)
- 康托展开
- POJ1077 HDU1043 Eight 八数码第四境界 双向广搜 康托展开 逆康托
- 全排列计算(康托展开)
- nyoj 139 我排第几个(康托展开)
- 康托展开(逆序数)
- HDU 1043 Eight(康托展开)
- 2017ACM-ICPC南宁网络赛Frequent Subsets Problem(康托展开+bfs)
- NOY 139 康托展开
- 康托展开【Template】
- POJ - 1077 - 康托展开
- HDU1043BFS 康托展开 八数码