zoukankan      html  css  js  c++  java
  • 关于next_permutation 例题:[P4163 [SCOI2007]排列

    ouyang语重心长:一定要把这个函数名记到哦!来,我们一起念一道:next_permunation
    看来我英语还是太撇了……

    STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation。


    算法思想:

    1.首先从最尾端开始往前寻找两个相邻元素,令第一元素为i,第二元素为ii,且满足i<ii。

    2.找到这样一组相邻元素后,再从最尾端开始往前检验,找出第一个大于i的元素,令为j,将i,j元素对调(swap)。

    3.再将ii之后的所有元素颠倒(reverse)排序。

    例题P4163 [SCOI2007]排列

    /*
    1.next_permutation前必须排序不然不是全排列
    2.感叹一句:stl大发好啊!就不用去重了!!!
    */
    #include <bits/stdc++.h>
    using namespace std;
    char a1[15];
    int a[15];
    int main()
    {   
    	int n;
        scanf("%d",&n);
    	 
        for(int i=1;i<=n;i++)
        {
            scanf("%s",a1);
            int len=strlen(a1); 
            memset(a,0,sizeof(a));
            
    		for(int i=0;i<=len-1;i++)
                a[i+1]=a1[i]-'0';
            
    		sort(a+1,a+len+1);//next_permutation前必须排序不然不是全排列
            
    		int mod,cnt=0;
            scanf("%d",&mod);
            do
            {
                long long q=0;  //防止爆
                for(int i=1;i<=len;i++)
                q=q*10+a[i];    //将数组转化成数 避免高精除法
                if(q%mod==0)
                cnt++;
            }while(next_permutation(a+1,a+len+1));
            printf("%d
    ",cnt);
        }   
        return 0;
    }
    
  • 相关阅读:
    脚本
    vim 马哥
    动态删除节点
    动态插入节点
    动态创建内容
    获取html元素内容
    设置元素的属性
    获取元素的属性
    jquery中:input和input的区别
    jQuery选择器总结
  • 原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11635645.html
Copyright © 2011-2022 走看看