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

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

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

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

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

题解

根据题意,可知题目计算的为全排列的次数 然后找规律 0123 0 0\*3! + 0\*2! + 0\*1! = 0 0132 1 0\*3! + 0\*2! + 1\*1! = 1 0213 2 0\*3! + 1\*2! + 0\*1! = 2 0231 3 0\*3! + 1\*2! + 1\*1! = 3 0312 4 0\*3! + 2\*2! + 0\*1! = 4 0321 5 0\*3! + 2\*2! + 1\*1! = 5 1023 6 1\*3! + 0\*2! + 0\*1! = 6 1032 7 1\*3! + 0\*2! + 1\*1! = 7 1203 8 1\*3! + 1\*2! + 0\*1! = 8 1230 9 1\*3! + 1\*2! + 1\*1! = 9 1302 10 1\*3! + 2\*2! + 0\*1! = 10 1320 11 1\*3! + 2\*2! + 1\*1! = 11 2013 12 2\*3! + 0\*2! + 0\*1! = 12 2031 13 2\*3! + 0\*2! + 1\*1! = 13 2103 14 2\*3! + 1\*2! + 0\*1! = 14 2130 15 2\*3! + 1\*2! + 1\*1! = 15 2301 16 2\*3! + 2\*2! + 0\*1! = 16 2310 17 2\*3! + 2\*2! + 1\*1! = 17 3012 18 3\*3! + 0\*2! + 0\*1! = 18 3021 19 3\*3! + 0\*2! + 1\*1! = 19 3102 20 3\*3! + 1\*2! + 0\*1! = 20 3120 21 3\*3! + 1\*2! + 1\*1! = 21 3201 22 3\*3! + 2\*2! + 0\*1! = 22 3210 23 3\*3! + 2\*2! + 1\*1! = 23 可以得出规律,比后面大的个数 * (i-1)! 查询资料可知,此为[康托展开式]中的[康托逆展开] 答案:22952601027516
## AC code:(不包含输入类)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.io.*;  
import java.util.*;
public class Main {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
PrintWriter pw=new PrintWriter(System.out);
String ori="bckfqlajhemgiodnp";
char[]a=ori.toCharArray();
long[]jc=new long[a.length];
jc[a.length-1]=1;
int[]count=new int[a.length];
int k=1;
long sum=0;
for(int i=jc.length-2;i>=0;i--){
jc[i]=jc[i+1]*k;
k++;
}
for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
count[i]++;
}
}
}
for(int i=0;i<a.length;i++){
sum+=count[i]*jc[i];
}
pw.println(sum);
pw.flush();
}
}