UVA 120 Stacks of Flapjacks 煎饼
2016-02-07 16:08
507 查看
转煎饼。
大体题意:
从上到下,给你n张饼的大小,你可以倒置某一张饼及其上面的全部的饼,问怎样做,可以使得饼从上到下,按从小到大顺序排序?
分析:
思路就是书中说的思路:从大到小依次遍历,先看是否在合适的位置,不再的话把他转到最上面,在转到合适位置!
注意:
1.数字不一定从1开始。
2.没有重复元素!
代码如下:
大体题意:
从上到下,给你n张饼的大小,你可以倒置某一张饼及其上面的全部的饼,问怎样做,可以使得饼从上到下,按从小到大顺序排序?
分析:
思路就是书中说的思路:从大到小依次遍历,先看是否在合适的位置,不再的话把他转到最上面,在转到合适位置!
注意:
1.数字不一定从1开始。
2.没有重复元素!
代码如下:
#include<set> #include<iostream> #include<vector> #include<cstdio> #include<algorithm> #include<sstream> #include<string> using namespace std; int a[40],len; int findkey(int val){ for (int i = 0; i < len; ++i) if (a[i] == val)return i; } int main() { //freopen("out.txt","w",stdout); string p; while(getline(cin, p)){ set<int>s; int k,cnt=0; stringstream ss(p); while(ss >> k){ s.insert(k); a[cnt++] = k; } len = (int)s.size(); int key,value; cnt=0; for (int i = 0; i < len; ++i){ if (i)printf(" "); printf("%d",a[i]); }printf("\n"); for (set<int>::reverse_iterator rit = s.rbegin(); rit != s.rend(); ++rit){ int value = *rit; key = findkey(value); if (key == len -cnt-1){++cnt;continue;} if (key){reverse(a,a + key + 1);cout << len - key << " ";} if (len-cnt-1){reverse(a,a+len-cnt);cout << cnt + 1 << " ";} ++cnt; } cout << "0" << endl; } return 0; }
相关文章推荐
- HDU 1074
- FUSE源码剖析
- 《时间的玫瑰》阅读笔记
- IoGetNextIrpStackLocation routine
- c++引用类型小问题
- 快速乘、快速幂(矩阵快速幂)
- oracle切割字符串后以单列多行展示
- HDU 1242 Rescue(BFS),ZOJ 1649
- sshpass不显示密码
- Javacript和AngularJS中的Promises
- c++引用类型小问题
- 读卡器项目总结(一)— 总汇
- nyist 914
- LCA最近公共祖先算法
- Bestcoder Round #71 HDU 5620 5621 5622 5623 5624
- C语言指针入门学习面面观
- 整除问题
- 数据结构基础之二叉树的转换
- LeeCode_055 Jump Game
- linux中的tar命令