生成排列(Generating Permutations, UVa11925)
来源:互联网 发布:linux内核内存管理浅析 编辑:程序博客网 时间:2024/06/06 09:36
题目描述:给你一个特定序列,要求你经过一定的变换规则将升序列变为给的特定序列。变换规则为:1.第一个元素和第二个元素交换. 2、首元素到尾部。
题目分析:借鉴的别人的。将一个升序列变为特定序列显然不如把这个特定序列变为一个升序列容易。那么就逆着处理,最后输出的时候倒着输出就行了。方法类似于冒泡排序的思想,若第一个元素大于第二个元素则交换,否则将最后一个元素变为首元素。注意:到第一个元素是n时,不进行交换,否则会出现死循环。
代码如下:
#include <iostream>#include <cstdio>#include <deque>#include <vector>using namespace std;const int maxn=300+10;deque <int> rise,in_num;vector<int> out_num;int n;bool judge(){ for(int i=0; i<n; i++) { if(in_num[i]!=rise[i]) { return false; } } return true;}void two(){ int temp=in_num.back(); in_num.pop_back(); in_num.push_front(temp);}void one(){ swap(in_num[0],in_num[1]);}bool solve(){ if(judge()) return true; while(1) { if(in_num[0]>in_num[1]&&in_num[0]!=n) { one(); out_num.push_back(1); if(judge()) return true; } else { two(); out_num.push_back(2); if(judge()) return true; } }}int main(){ while(scanf("%d",&n)==1&&n) { rise.clear(); in_num.clear(); out_num.clear(); int x; for(int i=0; i<n; i++) { scanf("%d",&x); in_num.push_back(x); rise.push_back(i+1); } solve(); for(int i=out_num.size()-1; i>=0; i--) { cout << out_num[i]; } cout << endl; } return 0;}
刚做了上一个题类似于选择排序的题,这个又类似于冒泡排序。上一题链接:
起重机(Crane, ACM/ICPC CERC 2013, UVa1611)
0 0
- 生成排列(Generating Permutations, UVa11925)
- 生成排列 Generating Permutations
- 习题8-7 UVA - 11925 Generating Permutations 生成排列(构造)
- 全排列生成 Permutations
- Permutations 排列的生成, 递归
- Permutations 全排列生成算法
- Uva11925
- uva10098 - Generating Fast(快速生成有序排列)
- UVa 10098 Generating Fast (全排列生成)
- UVa 11925 - Generating Permutations(构造法)
- UVa 11925:Generating Permutations(构造)
- 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
- php在同一个页面设置cookie然后读cookie为什么是Undefined
- viewpager中的fragment放置了MPAndroidChart,滑动受阻
- EXISTS子查询
- 【Unity】ScriptableObject的介绍
- 继承
- 生成排列(Generating Permutations, UVa11925)
- 使用Python求解最大公约数
- MYSQL
- 推送消息总结
- mysql 6
- 百元白鸡问题
- 关于Android线性布局与滚动实现
- java变量和数据类型
- 461. Hamming Distance