• leetcode4:Permutation


    #include <utility>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    //the next permutation
    template<class BidirIt>
    bool STL_next_permutation(BidirIt first, BidirIt last)
    {
        if (first == last) return false;
        BidirIt i = last;
        if (first == --i) return false;
     
        while (1) {
            BidirIt i1, i2;
     
            i1 = i;
            --i;
            if (*i < *i1) {
                i2 = last;
                while (!(*i < *--i2))
                    ;
                std::iter_swap(i, i2);
                std::reverse(i1, last);
                return true;
            }
            if (i == first) {
                std::reverse(first, last);
                return false;
            }
        }
    }
    void nextPermutation(int A[],int len)
    {
        STL_next_permutation(A, A+len);
    }
    
    
    //full pemutation
    void fullPerm(int A[],int m,int n)
    {
        if(m == n)
        {
            for(int i=0;i<n+1;i++)
                std::cout << A[i] << " ";
            std::cout << std::endl;
            return;
        }
        else
        {
            for(int i=m;i<n+1;i++)
            {
                std::swap(A[m], A[i]);
                fullPerm(A,m+1,n);
                std::swap(A[m], A[i]);
            }
        }
    }
    
    
    int Factorial(int n)
    {
        int fac=1;
        for(int i=1;i<=n;i++)
        {
            fac *=i;
        }
        return fac;
    }
    //康托编码第k个序列
    void CantorCode(int A[],int len,int k)
    {
        --k;
        std::vector<std::pair<int,bool>> v;
        for(int i=0;i<len;i++)
        {
            v.emplace_back(A[i],false);
        }
    
        for(int i=0;i<len;i++)
        {
            int j;
            int t=k/Factorial(len-i-1);
            for(j=0;j<len;j++)
            {
                if(!v[j].second)
                {
                    if(t==0) break;
                    --t;    
                }    
            }
            A[i]=v[j].first;
            v[j].second=true;
            k=k%Factorial(len-i-1);
        }
    }
  • 相关阅读:
    【noip模拟赛10】奇怪的贸易 高精度
    【noip模拟赛8】魔术棋子
    【noip模拟赛7】足球比赛 树
    P2502 [HAOI2006]旅行 并查集
    python发邮件:
    读取excel表格.py
    allure的其他参数
    生成allure测试报告:
    Java
    调用阿里云接口实现短信消息的发送源码——CSDN博客
  • 原文地址:https://www.cnblogs.com/wxquare/p/4823585.html
Copyright © 2020-2023  润新知