我排第几个
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
-
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列; - 输出
- 输出一个整数m,占一行,m表示排列是第几位;
- 样例输入
-
3 abcdefghijkl hgebkflacdji gfkedhjblcia
- 样例输出
-
1 302715242 260726926
- 来源
- [苗栋栋]原创
- 上传者
01.
#include<iostream>
02.
#include<string.h>
03.
using
namespace
std;
04.
int
b[]={1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800};
05.
int
kang(
char
s[])
06.
{
07.
int
num=0;
08.
for
(
int
i=0;i<12;i++)
09.
{
10.
int
temp=0;
11.
for
(
int
j=i+1;j<12;j++)
12.
{
13.
if
(s[j]<s[i])
14.
{++temp;}
15.
}
16.
num+=temp*b[12-i-1];
17.
}
18.
return
num+1;
19.
}
20.
int
main()
21.
{
22.
int
N;
23.
char
a[13];
24.
cin>>N;
25.
while
(N--)
26.
{
27.
cin >> a;
28.
int
k=kang(a);
29.
cout<<k<<endl;
30.
}
31.
return
0;
32.
}