nyoj139 我排第几个
我排第几个
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
-
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列; - 输出
- 输出一个整数m,占一行,m表示排列是第几位;
- 样例输入
-
3 abcdefghijkl hgebkflacdji gfkedhjblcia
- 样例输出
-
1 302715242 260726926
算法分析:这个题我是采用计算给定字符串后面还有多少个 -
View Code
1 #include<iostream>
2 using namespace std;
3
4 char a[12];
5 int fac[13];//存储的是1到12的阶乘数
6
7 int work(int k,char ch)//计算a[k]位置有多少字符比a[k]大且前面没有出现过
8 {
9 int i,ans=0;
10 ans='l'-ch;
11 for(i=0;i<k;i++)
12 if(a[i]>ch)
13 ans--;
14 return ans;
15 }
16
17 int main()
18 {
19 int test,i,temp;
20 fac[1]=1;
21 for(i=2;i<=12;i++) fac[i]=fac[i-1]*i;
22 cin>>test;
23 while(test--)
24 {
25 cin>>a;
26 temp=0;
27 for(i=0;i<11;i++)
28 {
29 temp+=(work(i,a[i])*fac[11-i]);
30 }
31 cout<<fac[12]-temp<<endl;
32 }
33 return 0;
34 }


浙公网安备 33010602011771号