zoukankan      html  css  js  c++  java
  • ACM 擅长排列的小明

    擅长排列的小明

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:4
     
    描述
    小明十分聪明,而且十分擅长排列计算。比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对。
     
    输入
    第一行输入整数N(1<N<10)表示多少组测试数据,
    每组测试数据第一行两个整数 n m (1<n<9,0<m<=n)
    输出
    在1-n中选取m个字符进行全排列,按字典序全部输出,每种排列占一行,每组数据间不需分界。如样例
    样例输入
    2
    3 1
    4 2
    样例输出
    1
    2
    3
    12
    13
    14
    21
    23
    24
    31
    32
    34
    41
    42
    43

    题目就是求字符串123..n的全排列的前m个字符,将123..n进行全排列,每个排列的前m个字符即为所求,注意重复的字符
    #include <iostream>
    #include <string>
    #include <set>
    #include <algorithm>
    #include <iterator>
    using namespace std;
    
    int main(){
        int N;
        cin >>N;
        while(N--){
            int n,m;
            cin >>  n >> m;
            string str = "";
            for(int i = 0 ; i < n; ++i) str+='1'+i;
            set<string> res;
            do{
                string tmp = str.substr(0,m);
                if(res.find(tmp)==res.end()) res.insert(tmp);
            }while(next_permutation(str.begin(),str.end()));
            copy(res.begin(),res.end(),ostream_iterator<string>(cout,"
    "));
        }
    
    }
    
    

    对其空间复杂度优化,不需要用set保存每个排列,只需记住前一个排列,如果现在排列不等于前一个排列才输出,利用next_permutation函数时按照字串大小输出的

    优化后的代码

    #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    int main(){
        int N;
        cin >>N;
        while(N--){
            int n,m;
            cin >>  n >> m;
            string str = "",preStr="";
            for(int i = 0 ; i < n; ++i) str+='1'+i;
            do{
                string tmp = str.substr(0,m);
                if(preStr!=tmp){
                    preStr = tmp;
                    cout<<preStr<<endl;
                }
            }while(next_permutation(str.begin(),str.end()));
        }
    }
     
  • 相关阅读:
    spring-data-jpa 二、多对一结构、Repository
    bootstrap学习(二)页面
    bootstrap学习(一)栅格、布局
    ArrayList源码学习
    python学习-Pillow图像处理
    python学习-抓取知乎图片
    python-os创建文件夹-create_dir_if_not_exist.py
    python-shutil学习
    python-argparse批量修改后缀名-batch_file_rename.py
    python-argparse使用
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3675242.html
Copyright © 2011-2022 走看看