蓝桥 排列序数(康托展开)

标题: 排列序数


X星系的某次考古活动发现了史前智能痕迹。 
这是一些用来计数的符号,经过分析它的计数规律如下: 
(为了表示方便,我们把这些奇怪的符号用a~q代替)


abcdefghijklmnopq 表示0 
abcdefghijklmnoqp 表示1 
abcdefghijklmnpoq 表示2 
abcdefghijklmnpqo 表示3 
abcdefghijklmnqop 表示4 
abcdefghijklmnqpo 表示5 
abcdefghijklmonpq 表示6 
abcdefghijklmonqp 表示7 
…..


在一处石头上刻的符号是: 
bckfqlajhemgiodnp


请你计算出它表示的数字是多少?


康拓展开求排列的次序,注意从零开始。

X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0!

还可以利用康托逆展开求排在某一次序的排列。

#include
#include
#include
#include
#include
using  namespace std;
typedef long long ll;
int vis[20];

ll jiecheng(ll x){
	if(x==0)
		return 1;
	return x*jiecheng(x-1);
}

int main(){
	string s="bckfqlajhemgiodnp";
	ll sum=0;
	for(int i=1; i<=s.size(); i++)
	{
		ll num=0;
		for(int j=0; j
22952601027516

你可能感兴趣的:(数学)