uva Stacks of Flapjacks
题目链接:Click Here~
题目描写叙述:
给你n个数。要你得到的最后结果是从下到大排序。可是给出的序列不一定是有序你。要通过你的调整。问:要经过哪几个位置上的数的调整?
算法分析:
一開始,我的思路是直接模拟一边消除逆序数就能够了,由于我看数据非常小,仅仅有30.可是提交之后却TEL了。
后来上网查了一下。看到有一个人的思路还是非常好的。就是说运用到了动态规划的思想。
确实非常巧妙啊!
思路:在查询到当前第i个数的时候,你必须保证其后面的数是有序的,且都比i大。仅仅要保证了这一个条件之后,我们能够从快排的思想得知这是正确的。
但是怎样能够实现呢?事实上也非常easy。比方,但前你查询到了第i个了,但是第i个不满足条件。并且这是后又有两种情况。
(第i个数本应该的数在哪里?)1、可能就在最前面,那个此时你能够直接Flip操作就能够了。
2、不再最前面,此时你能够先找到最大数的位置,然后先将最大数Flip操作实现其到最前面,然后再实现操作1就OK了。
例:
2 4 1 3 5
此时我们查询到了3这个位置,你会发现3这个位置本来应该是4的可是如今不是,所以你要进行Flip操作。可是你有发现4不再最前面,即使你实现了Flip操作也得不到正确结果。
所以,你要先把4Flip到最前面,即2的位置。
4 2 1 3 5
之后在Flip得到
3 1 2 4 5
。
。。。
。。这样一直查询下去,O(n)的算法复杂度实现就能够了。
#include <iostream>
#include <algorithm>
#include <string>
#include <iterator>
#include <sstream>
#include <deque>
#include <vector>
#include <cstdio>
using namespace std; int main()
{
string line;
while(getline(cin,line))
{
int x;
deque<int> deq;
deque<int>::iterator iter;
istringstream ss(line);
while(ss>>x){
deq.push_front(x);
cout<<x<<" ";
}
cout<<endl;
for(iter = deq.begin();iter != deq.end();++iter){
deque<int>::iterator iMax = max_element(iter,deq.end());
if(iter != iMax){ //当前这个数的位置不应该待在这
if(iMax != deq.end()-1){ //最大数不再最前面(操作1)
reverse(iMax,deq.end());
cout<<distance(deq.begin(),iMax)+1<<' ';
}
reverse(iter,deq.end()); //操作2
cout<<distance(deq.begin(),iter)+1<<' ';
}
}
cout<<"0"<<endl;
}
return 0;
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
uva Stacks of Flapjacks的更多相关文章
- UVA Stacks of Flapjacks 栈排序
题意:给一个整数序列,输出每次反转的位置,输出0代表排序完成.给一个序列1 2 3 4 5,这5就是栈底,1是顶,底到顶的位置是从1~5,每次反转是指从左数第i个位置,将其及其左边所有的数字都反转,假 ...
- Uva 120 - Stacks of Flapjacks(构造法)
UVA - 120 Stacks of Flapjacks Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld &a ...
- uva 120 stacks of flapjacks ——yhx
Stacks of Flapjacks Background Stacks and Queues are often considered the bread and butter of data ...
- UVaOJ 120 - Stacks of Flapjacks
120 - Stacks of Flapjacks 题目看了半天......英语啊!!! 好久没做题...循环输入数字都搞了半天...罪过啊!!! 还是C方便一点...其实C++应该更方便的...C+ ...
- 【思维】Stacks of Flapjacks
[UVa120] Stacks of Flapjacks 算法入门经典第8章8-1 (P236) 题目大意:有一个序列,可以翻转[1,k],构造一种方案使得序列升序排列. 试题分析:从插入排序即可找到 ...
- Stacks of Flapjacks(栈)
Stacks of Flapjacks Background Stacks and Queues are often considered the bread and butter of data ...
- Stacks of Flapjacks
Stacks of Flapjacks Background Stacks and Queues are often considered the bread and butter of data s ...
- (白书训练计划)UVa 120 Stacks of Flapjacks(构造法)
题目地址:UVa 120 水题. 从最大的開始移,每次都把大的先翻到最上面,再翻到以下. 代码例如以下: #include <iostream> #include <cstdio&g ...
- B - Stacks of Flapjacks UVA - 120
BackgroundStacks and Queues are often considered the bread and butter of data structures and find us ...
随机推荐
- BZOJ 3439: Kpm的MC密码( trie + DFS序 + 主席树 )
把串倒过来插进trie上, 那么一个串的kpm串就是在以这个串最后一个为根的子树, 子树k大值的经典问题用dfs序+可持久化线段树就可以O(NlogN)解决 --------------------- ...
- TinyFox 部署在CentOS7 中测试使用
一:TinyFox介绍 TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇".TinyFox本身的功能是htm ...
- git创建分支与合并分支
git branch myfeture 创建分支 git checkout myfeture git add --all git commit -m git push origin myfeture ...
- Excel如何进行SVN
KSFramework常见问题:Excel如何进行SVN协作.差异比较? Excel如何进行SVN协作.差异比较? 嗯,这是一个令人困惑的问题.游戏开发.程序开发时,使用Excel可以添加文档.注 ...
- Initialization failed for block pool Block pool(转载)
2014-06-18 20:34:59,622 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed ...
- 领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处
PO:persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录.好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO:business object业 ...
- Html 小插件5 百度搜索代码2
网页添加百度搜索框代码大全 ★ 用法:在下面选择合适的样式,复制代码到网页中相应位置粘贴即可. ★ 样式一(200×30)代码: <iframe id="baiduframe" ...
- liunx 同步时间
ntpdate stdtime.gov.hk (美国) time.nist.gov (复旦)(国内用户推荐) ntp.fudan.edu.cn 微软公司授时主机(美国) time.windows.co ...
- 有关Gcd,Lcm的一点小结论
先介绍两个: 大数的Gcd Stein+欧几里德 function stein(a,b:int64):int64; begin if a<b then exit(stein(b,a)); the ...
- Mirantis Certification summary
preface Mirantis Certification (MCA100 )summary roughly question types handy remain by Ruiy!