poj1833
来源:互联网 发布:淘宝店开了一年没生意 编辑:程序博客网 时间:2024/06/09 16:18
题目大意:有T组测试数据,每组测试数据输入n,k,以及从1到n的一个排列,表示有n个数,k为此排列按照字典顺序后第k个排列,输出这个排列。
解题思路:
1.从最后往前找,直到找到第一个升序排列,即啊a[i]>a[i-1];
2.从a[i]开始向后找,找到比a[i]大的最小的元素a[p];
3.交换a[i-1]与a[p];
4.将a[i]及以后的数降序排列;
5.输出。
个人心得:
这个题虽然不难,但是解这个题还是费了姐姐我n多个脑细胞,还好最终解了出来。在这其中错了好多次,个人对其中的细节部分掌握的不是很好!不过在以后的日子中肯定会努力的!耶,加油↖(^ω^)↗
个人觉得一定要懂得原理,所以用模板的部分被注释掉了,自己感觉收获了,也希望能帮助到大家!
代码:
<span style="font-size:18px;"><strong>#include<iostream>#include<cstdio>#include<algorithm>using namespace std;//int main()//{// int t,n,k,i,index,temp,a[1025];// scanf("%d",&t);// while(t--)// {// scanf("%d%d",&n,&k);// for(i=0;i<n;i++)// scanf("%d",&a[i]);// while(k--)// next_permutation(a,a+n);// printf("%d",a[0]);// for(i=1;i<n;i++)// printf(" %d",a[i]);// printf("\n");// }// return 0;//}int main(){ int t,n,k,i,index,temp,a[1025]; scanf("%d",&t); while(t--) { a[0]=1024; index=temp=0; scanf("%d%d",&n,&k); for(i=1;i<=n;i++) scanf("%d",&a[i]); while(k--) { for(i=n;i>1;i--) { if(a[i]>a[i-1]) { index=i-1; break; } } if(index) { for(i=index+1;i<=n;i++) { if(a[i]>a[index]&&a[i]<a[temp]) { temp=i; } } int m=a[index]; a[index]=a[temp]; a[temp]=m; } sort(a+index+1,a+n+1); } printf("%d",a[1]); for(i=2;i<=n;i++) printf(" %d",a[i]); printf("\n"); } return 0;}</strong></span>
0 0
- poj1833
- poj1833
- poj1833
- poj1833
- poj1833
- poj1833
- POJ1833 排列
- poj1833(排列组合)
- poj1833 排列
- POJ1833-排列
- POJ1833:排列
- POJ1833 排列
- poj1833-排列
- POJ1833 排列
- poj1833 排列
- POJ1833排列
- Poj1833 20151113
- POJ1833\next_permutation()
- 内部类总结
- Maximum Subarray
- ASP.NET - 维持 ViewState
- Java运算符
- 让Category支持添加属性与成员变量
- poj1833
- javascript 中 getElementsByName和getElementById的使用。
- 数据结构学习笔记 图:深度优先搜索(严蔚敏版)
- 转载《有的放矢》的一些金句
- 当失败再一次袭来 我选择坚强
- 【JAVA】纯JSP文件二维码生成代码分享
- 伍云召
- jni 打印Log消息
- [Python 学习] 二、在Linux平台上使用Python