当前位置:   article > 正文

STL 全排列_输出字母a、b、c、d,4个元素全排列的每一种排列

输出字母a、b、c、d,4个元素全排列的每一种排列

1. 排列序数


Description

如果用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个两两不同的小写字母,给出它们组成的串,你能求出该串在所有排列中的序号吗?

Input

一行,一个串。

Output

一行,一个整数,表示该串在其字母所有排列生成的串中的序号。注意:最小的序号是0。

Samples

Input 复制

bdca

Output

11

Input 复制

cedab

Output

70
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long m,n,b,c,d,e,i,j,k,s,t;
  4. int main(){
  5. string s,ss;
  6. cin>>s;
  7. ss=s;
  8. sort(s.begin(),s.end());
  9. while(ss!=s){
  10. next_permutation(s.begin(),s.end());
  11. k++;
  12. }
  13. cout<<k;
  14. return 0;
  15. }

2.稍大的串


Description

串可以按照字典序进行比较。例如:
abcd 小于 abdc

如果给定一个串,打乱组成它的字母,重新排列,可以得到许多不同的串,在这些不同的串中,有一个串刚好给定的串稍微大一些。科学地说:它是大于已知串的所有串中最小的串。你的任务就是求出这个“稍大的串”。

Samples

Input 复制

abfxy

Output

abfyx

Input 复制

ayyyxxff

Output

fafxxyyy

Hint

数据规模约定:
 输入的串不超过1000个字符。

特例:
 如果已知的串已经是所有重组串中最大的,则原样输出读入的那个串。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long m,n,b,c,d,e,i,j,k,t;
  4. int main() {
  5. string s;
  6. cin >> s;
  7. next_permutation(s.begin(), s.end());
  8. cout<<s;
  9. return 0;
  10. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/795270
推荐阅读
相关标签
  

闽ICP备14008679号