康托展开
2015-01-30 20:13
141 查看
康托展开
#include
#define n 3
int main()
{
int fac[]={1,1,2},num=0,temp,i,j,s[]={3,2,1};
for(i=0;i
{
temp=0;
for(j=i+1;j
{
if(s[j]
temp++;//判断几个数小于它
}
num+=fac[n-i-1]*temp;//(或num=num+fac[n-i-1]*temp;)
}
printf("%d\n",num+1);
return 0;
}
//6
康托逆展开
#include
int main()
{
int fac[]={1,1,2,6,24},h[6]={1,2,3,4,5};
int res[5];
int i,j,l,t,x=16,k=5;
x--;
for(i=1;i<=k;i++)
{
t=x/fac[k-i];
x-=t*fac[k-i];
for(j=1,l=0;l<=t;j++)
if(h[j]!=-1)
l++;
j--;
h[j]=-1;
res[i-1]=j;
}
for(i=0;i<5;i++)
printf("%d",res[i]);
putchar(10);
return 0;
}
//14352
#include
#define n 3
int main()
{
int fac[]={1,1,2},num=0,temp,i,j,s[]={3,2,1};
for(i=0;i
{
temp=0;
for(j=i+1;j
{
if(s[j]
temp++;//判断几个数小于它
}
num+=fac[n-i-1]*temp;//(或num=num+fac[n-i-1]*temp;)
}
printf("%d\n",num+1);
return 0;
}
//6
康托逆展开
#include
int main()
{
int fac[]={1,1,2,6,24},h[6]={1,2,3,4,5};
int res[5];
int i,j,l,t,x=16,k=5;
x--;
for(i=1;i<=k;i++)
{
t=x/fac[k-i];
x-=t*fac[k-i];
for(j=1,l=0;l<=t;j++)
if(h[j]!=-1)
l++;
j--;
h[j]=-1;
res[i-1]=j;
}
for(i=0;i<5;i++)
printf("%d",res[i]);
putchar(10);
return 0;
}
//14352
相关文章推荐
- 康托展开
- 康托展开及逆运算
- HDU 1043 搜索+康托展开
- sdibt 3146 The K'th number(康托展开)
- codevs1225 八数码难题(A*搜索+康托展开)
- HDU 3567 Eight II 打表,康托展开,bfs,g++提交可过c++不可过 难度:3
- vijos - P1092全排列 (康托展开 + 康托展开的逆运算)
- LightOJ1060 nth Permutation(不重复全排列+逆康托展开)
- 我排第几个——康托展开
- poj 1077(BFS预处理+康托展开)
- 康托展开
- 全排列方法二(康托展开)
- nyoj 139 我排第几个(康托展开)
- 康托展开:对全排列的HASH和还原,判断搜索中的某个排列是否出现过
- HDU 1043 全排列 康托展开
- 【数学】康托展开
- 康托展开
- 数学【P2524】 Uim的情人节礼物·其之弐 (康托展开)
- USACO / Stringsobits (DP构造/康托展开)
- 康托展开和逆康托展开