全排列 next_permutation() 函数的使用

看来看去还是这篇博客比较简洁明了

https://www.cnblogs.com/My-Sunshine/p/4985366.html

顺便给出牛客网的一道题,虽然这道题用dfs写出全排列也能做,题意小心理解,后面给出题目和别人AC代码吧,手动心累。

https://www.nowcoder.com/acm/contest/156/D

这个函数包含在头文件 include <algorithm> 里面

基本格式

do
{
  
      ...
}while(next_permutation(a, a + n));

 

#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 10005;
int main()
{
    int n;
    while(cin >> n && n)
    {
        int a[MAXN];
        for(int i = 0;i < n;++i)
            cin >> a[i];
//        因为这个 next_permutation() 是按字典序排序结束的,所以要先 sort 排序
//        自己可以试试把 sort 去掉会有什么结果
//        返回值据说是 bool 类型
        sort(a, a + n);
        do
        {
            for(int i = 0;i < n;++i)
                cout << a[i] << " ";
            cout << endl;
        }while(next_permutation(a, a + n));
    }
    return 0;
}

输入

3
3 2 1

输出

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

****************************************

把 sort 去掉后

输入

3
3 2 1

输出

3 2 1

******************************************

链接:https://www.nowcoder.com/acm/contest/156/D
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

托米没有完成上一个任务,准备施展黑魔法推倒 1317

黑魔法咒语被描述为一个 长为 n 的,仅包含小写英文字母 'a'...'i' 的字符串,在托米所在的星球,魔法造成的每次有效伤害都是来自他的一个子序列,对于每一个 'a'... 'i' 的排列(共 9! 种),若作为咒语的子序列出现, 就会造成 1 的伤害

而咒语的总伤害为所有 'a'... 'i' 的排列造成的伤害值之和,托米能打出多少点的伤害,是否能击败 1317 呢?

输入描述:

一行输入一个字符串 s

输出描述:

一行输出一个数,表示伤害值
示例1

输入

复制
aabcdefghi

输出

复制
1

备注:

|s| ≤  3000
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5  
 6 char str[4005];
 7  
 8 int main()
 9 {
10     char ss[]={"abcdefghi"};
11     scanf("%s",str);
12     register int ans=0;
13     do{
14         register int i=0,j=0;
15         while(i<9&&str[j])
16         {
17             if(ss[i]==str[j]){
18                 i++,j++;
19             }else{
20                 j++;
21             }
22         }
23         if(i==9) ans++;
24     }while(next_permutation(ss,ss+9));
25     printf("%d\n",ans);
26     return 0;
27 }

 

posted @ 2018-07-28 10:02  谁知道你啊啊啊  阅读(245)  评论(0编辑  收藏  举报