字母排列_next_permutation_字典序函数_待解决
问题 B: 字母排列
时间限制: 1 Sec 内存限制: 64 MB提交: 19 解决: 5
[提交][状态][讨论版]
题目描述
当给出一串字符时,我们逐个可以变换其字符,形成新的字符串。假如对这些字符进行排序(按字母顺序),那么,字符串本身被排序了。任何设定的变换都可能产生独特的决定其在排序中的位置的数字。例如,字符串“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; }