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 }
posted @ 2012-03-22 14:51  mtry  阅读(748)  评论(0)    收藏  举报