第八届蓝桥杯模拟赛 排列序数

标题: 排列序数

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

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

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

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

请提交该整数,不要填写任何多余的内容,比如说明或注释。

 

答案:22952601027516

思路:显然是个康托展开,康托展开的讲解可参考:https://blog.csdn.net/qq_38701476/article/details/81003290

【原理】X = A[0] * (n-1)! + A[1] * (n-2)! + … + A[n-1] * 0! (A[i]表示在位置i后比位置i上数小的数的个数)

【举例】在 (1, 2, 3, 4, 5) 5个数的排列组合中,计算 (3, 4, 1, 5, 2) 的康托展开值

               X = 2 * 4! + 2 * 3! + 0 * 2! + 1 * 1! + 0 * 0! = 61 

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

string ss="bckfqlajhemgiodnp";
bool flag['q'];
long long ans[18];

int main()
{
	long long sum=0;
	ans[0]=1;
	for(int i=1;i<=16;i++)
		ans[i]=ans[i-1]*i;
	for(int i=0;i<=16;i++)
	{
		for(int j='a';j

 

你可能感兴趣的:(蓝桥杯,康托展开)