• 全排列 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
    ",ans);
    26     return 0;
    27 }
    现在所有的不幸都是以前不努力造成的。。。
  • 相关阅读:
    课后作业2
    软工团队项目度量反馈平台需求分析文档-北航软工暑期培训班团队项目1组
    《构建之法》教学笔记——Python中的效能分析与几个问题
    高职院校软件技术专业程序设计课程体系探索(一)
    network_node:host解决Docker容器化部署微服务出现的Dobbo通信问题
    微服务中的健康监测以及其在ASP.NET Core服务中实现运行状况检查
    词频统计
    消息队列
    Linux文件扩展思考随笔
    如何在Mirth Connect中创建和调用自定义Java代码
  • 原文地址:https://www.cnblogs.com/shuizhidao/p/9380818.html
Copyright © 2020-2023  润新知