poj 1833----排列

来源:互联网 发布:网游等级算法 编辑:程序博客网 时间:2024/06/06 14:15
学习了一个新的库函数next_permutation(op1,op2),op1存放排列数组的头地址,op2指出排列的长度,每运行一次,op1存放原排列的下一个排列。
这题难在排列到最后时返回空,用while(next_permutation(a,a+n)),到最后时不能重新排列,看大神代码才知道用一个for循环next_permutation(op1,op2)可以从0在到1循环排列
原本就只有这些难点,可提交代码时,反复超时!现贴出来,大家引以为戒!
 

Description

题目描述:
   大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列。

任务描述:
   给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3…n。
   比如:n = 3,k=2 给出排列2 3 1,则它的下1个排列为3 1 2,下2个排列为3 2 1,因此答案为3 2 1。

Input

第一行是一个正整数m,表示测试数据的个数,下面是m组测试数据,每组测试数据第一行是2个正整数n( 1 <= n < 1024 )和k(1<=k<=64),第二行有n个正整数,是1,2 … n的一个排列。

Output

对于每组输入数据,输出一行,n个数,中间用空格隔开,表示输入排列的下k个排列。

Sample Input

33 12 3 13 13 2 1
10 2
1 2 3 4 5 6 7 8 9 10
Sample Output
3 1 21 2 31 2 3 4 5 6 7 9 8 10
 
 
超时的代码:
#include<stdio.h>#include<algorithm>using namespace std;int a[2000];int main(){    int m,n,k,i,j;    scanf("%d",&m);    for(i=0;i<m;i++)    {        scanf("%d%d",&n,&k);        for(j=0;j<n;j++)            scanf("%d",&a[j]);        for(i=0;i<k;i++)            next_permutation(a,a+n);        for(j=0;j<n-1;j++)            printf("%d ",a[j]);        printf("%d\n",a[n-1]);    }    return 0;}

AC的代码:
#include<stdio.h>#include<algorithm>using namespace std;int a[2000];int main(){    int m,n,k,i,j,x,y;    scanf("%d",&m);    for(i=0;i<m;i++)    {        scanf("%d%d",&n,&k);        for(j=0;j<n;j++)            scanf("%d",&a[j]);        for(x=0;x<k;x++)            next_permutation(a,a+n);        for(y=0;y<n-1;y++)            printf("%d ",a[y]);        printf("%d\n",a[n-1]);    }    return 0;}

 
 
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 迷你世界联机卡怎么办 绝地求生被火瓶烧了怎么办 win8电脑太卡怎么办 win8关机没反应怎么办 arma3没子弹了怎么办 g350d柴油冻了怎么办 散热硅胶干了怎么办 电脑打不开pdf文件怎么办 文件变成快捷方式打不开怎么办 ai文件打不开了怎么办 电脑下载了病毒软件怎么办 打嗝停不下来怎么办 咳嗽停不下来怎么办 电动机停不下来怎么办 电脑所有程序都打不开怎么办 机顶盒画面卡顿怎么办 电脑画面卡顿怎么办 鞋舌头跑偏怎么办 球球大作战老卡怎么办 孩子被打却不敢还手怎么办? 自卫砍伤了人怎么办 系统还原节点黑屏了怎么办 我惹事了要被打怎么办 诛仙宠物太多怎么办 笔记本玩lolfps低怎么办 lol延迟有42怎么办 软件安装后黑屏怎么办 汽车脚垫翘边怎么办 晴季寿司会员怎么办 理财产品跑路了怎么办 宝宝足跟血异常怎么办 孩子足跟血异常怎么办 打印机显示用户干预怎么办 打印机脱机状态怎么办win10 电脑打印机显示脱机怎么办 佳能打印机显示脱机怎么办 汽车说明书丢了怎么办 oppo手机刷机后内存不足怎么办 电脑运行太慢怎么办 台式电脑卡慢怎么办 touch炫舞不记得区怎么办