<center>

问题 B: 字母排列

时间限制: 1 Sec  内存限制: 64 MB
提交: 19  解决: 5
[提交][状态][讨论版]
</center>

题目描述

当给出一串字符时,我们逐个可以变换其字符,形成新的字符串。假如对这些字符进行排序(按字母顺序),那么,字符串本身被排序了。任何设定的变换都可能产生独特的决定其在排序中的位置的数字。例如,字符串“acab”产生12种不同的变换:
aabc    1   acab    5   bcaa    9
aacb    2   acba    6   caab   10
abac    3   baac    7   caba   11
abca    4   baca    8   cbaa   12
因此,字符串“acab”在这个序列中的位置被记作5。
编一个程序,读入一个字符串,计算出其在字符串变换顺序时的位置。注意这个变换的数值可能会很大,但是,我们可以保证,数值再大也不可能大于231-1。

输入

  一个字符串S。

输出

  一个整数,表示字符串在它的排列的序列中的位置。

样例输入

bacaa

样例输出

15

提示

 

50%的数据:字符串长度≤10;

100%的数据:字符串长度≤30

 

解题思路:用了next_permutation()函数,但是字符串长度是小于30的,会超时,不知道怎么才能改进.

代码:

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

int main()
{
    char a[35];
    char base[35];
    int len=0;
    int b=0;
    long int cou=0;
    scanf("%s",a);
    len=strlen(a);
    do{
        cou++;
    }while(prev_permutation(a,a+len));
    printf("%ld",cou);
    return 0;
}