生成排列 Generating Permutations
来源:互联网 发布:cocostudio mac 下载 编辑:程序博客网 时间:2024/05/22 12:56
逆向思考。操作1不变,操作2等价于将尾部数字放到头部,这样最后只需要逆序输出操作序列即可。具体做法把序列看作环状的,每次操作2就等价于移动头部的位置,用操作1每次维护头部的最小元素,再执行操作2。这个过程类似于排序,当a[0]==1或n时就不做操作1(a[0]==n时这时的头部进行多次操作2最终会变为尾部)。
//紫书P254 生成排列 //Serene#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cmath>#include<vector>using namespace std;const int maxn=300+10;int n,a[maxn];vector<int> ans;bool ok(){for(int i=0;i<n-1;++i) if(a[i]>a[i+1]) return 0;return 1;}int main() {while(scanf("%d",&n)!=EOF) {if(!n) {cout<<"\n";continue;}ans.clear();for(int i=0;i<n;++i) scanf("%d",&a[i]);while(1){if(ok()) break;if(a[0]!=n&&a[1]<a[0]) {ans.push_back(1);swap(a[0],a[1]);}if(ok()) break;ans.push_back(2); int v=a[n-1]; for(int i=n-2;i>=0;--i) a[i+1]=a[i]; a[0]=v;}for(int i=ans.size()-1;i>=0;--i) printf("%d",ans[i]);printf("\n");}return 0;}
0 0
- 生成排列 Generating Permutations
- 生成排列(Generating Permutations, UVa11925)
- 习题8-7 UVA - 11925 Generating Permutations 生成排列(构造)
- 全排列生成 Permutations
- Permutations 排列的生成, 递归
- Permutations 全排列生成算法
- uva10098 - Generating Fast(快速生成有序排列)
- UVa 10098 Generating Fast (全排列生成)
- UVa:11925 Generating Permutations
- UVa 11925 - Generating Permutations
- UVa 11925 Generating Permutations
- UVa - 11925 - Generating Permutations
- 11925 - Generating Permutations
- UVA 11925 Generating Permutations
- UVA 11925 - Generating Permutations
- Generating Permutations UVA
- Permutations 排列
- Permutations:排列
- tcp请求建立连接,结束连接握手过程
- Spring源码解读前篇--Spring容器的设计
- 读书笔记 effective c++ Item 25 实现一个不抛出异常的swap
- jstl获取list的长度大小
- Darwin Stream server(DSS服务器)的Relay(中继/转发)设置
- 生成排列 Generating Permutations
- JavaScript函数isFinite()
- 10954
- L
- 不能安装64位office提示已安装32位的
- 在jQuery下如何使用keydown与keypress来监听按键!
- libgeotiff 1.4.2 在win7x64+vs2015编译生成
- 06:空格分隔输出
- 加法变乘法