问题 1815: [蓝桥杯][2014年第五届真题]排列序数
时间限制: 1Sec 内存限制: 128MB 提交: 208 解决: 100
题目描述
如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号:
abcd 0
abdc 1
acbd 2
acdb 3
adbc 4
adcb 5
bacd 6
badc 7
bcad 8
bcda 9
bdac 10
bdca 11
cabd 12
cadb 13
cbad 14
cbda 15
cdab 16
cdba 17
...
现在有不多于10个两两不同的小写字母,给出它们组成的串,你能求出该串在所有排列中的序号吗?
输入
一行,一个串。
输出
一行,一个整数,表示该串在其字母所有排列生成的串中的序号。注意:最小的序号是0。
样例输入
bdca
样例输出
11
#include<iostream>
#include<algorithm>
using namespace std;
int main(void){
string t,s;
cin>>t;
s = t;
sort( s.begin(),s.end());
int cnt = 0;
do{
if( t == s ){
cout<<cnt<<endl;
break;
}
cnt++;
}while( next_permutation(s.begin() ,s.end()));
return 0;
}