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的更多相关文章

  1. UVA Stacks of Flapjacks 栈排序

    题意:给一个整数序列,输出每次反转的位置,输出0代表排序完成.给一个序列1 2 3 4 5,这5就是栈底,1是顶,底到顶的位置是从1~5,每次反转是指从左数第i个位置,将其及其左边所有的数字都反转,假 ...

  2. Uva 120 - Stacks of Flapjacks(构造法)

    UVA - 120  Stacks of Flapjacks Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld &a ...

  3. uva 120 stacks of flapjacks ——yhx

     Stacks of Flapjacks  Background Stacks and Queues are often considered the bread and butter of data ...

  4. UVaOJ 120 - Stacks of Flapjacks

    120 - Stacks of Flapjacks 题目看了半天......英语啊!!! 好久没做题...循环输入数字都搞了半天...罪过啊!!! 还是C方便一点...其实C++应该更方便的...C+ ...

  5. 【思维】Stacks of Flapjacks

    [UVa120] Stacks of Flapjacks 算法入门经典第8章8-1 (P236) 题目大意:有一个序列,可以翻转[1,k],构造一种方案使得序列升序排列. 试题分析:从插入排序即可找到 ...

  6. Stacks of Flapjacks(栈)

     Stacks of Flapjacks  Background Stacks and Queues are often considered the bread and butter of data ...

  7. Stacks of Flapjacks

    Stacks of Flapjacks Background Stacks and Queues are often considered the bread and butter of data s ...

  8. (白书训练计划)UVa 120 Stacks of Flapjacks(构造法)

    题目地址:UVa 120 水题. 从最大的開始移,每次都把大的先翻到最上面,再翻到以下. 代码例如以下: #include <iostream> #include <cstdio&g ...

  9. B - Stacks of Flapjacks UVA - 120

    BackgroundStacks and Queues are often considered the bread and butter of data structures and find us ...

随机推荐

  1. A - A

    A - A Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status ...

  2. Django Web开发【6】使用Ajax增强用户体验

    Ajax及其优点 Ajax实际上就是指异步Javascript与XML,它包含以下技术: HTML与CSS Javascript XMLHttpRequest XML Ajax技术让客户端与服务器实现 ...

  3. codeforces 650D. Zip-line 线段树

    题目链接 题目的意思很简单, 就是给你n个数, m个询问, 每次询问修改某一个位置的值, 然后问你修改完之后数列的lis是多少. 询问独立. 对于原数列, 我们将它离散化, 令dp1[i]为以i为结尾 ...

  4. maven 常用命令及操作(转)

    Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1. 创建Maven的普通 ...

  5. Android中计算时间差的实现方法

    今天为“至简天气”增加了一项功能:在启动时根据上次更新数据的时间判断是否有必要更新数据,因为 weather.com.cn 的实况数据貌似是25分钟才会刷新一次,只有在据上次更新的时间达25分钟以上才 ...

  6. CAD教程/视频教程/软件类专题资料免费下载整理合集

    CAD教程&视频教程类专题资料免费下载 资源列表:http://www.xiaodianlv.com/group/cad/ [1] <AUTOCAD2012中文版全套视频教程大合集> ...

  7. Wide character in print at hcp.pl line 21.

    jrhmpt01:/root# cat -n hcp.pl 1 use LWP::UserAgent; 2 use Encode; 3 $ua = LWP::UserAgent->new; 4 ...

  8. 精通 VC++ 实效编程280例 - 01 窗口

    窗口是屏幕上的一个矩形区域.窗口分为3种:重叠窗口.弹出窗口和子窗口.每个窗口都有由系统绘制的“非客户区”和应用程序绘制的“客户区”.在 MFC 中,CWnd 类为各种窗口提供了基类. 1 通过 HW ...

  9. UVA 11549 Calculator Conundrum (Floyd判圈算法)

    题意:有个老式计算器,每次只能记住一个数字的前n位.现在输入一个整数k,然后反复平方,一直做下去,能得到的最大数是多少.例如,n=1,k=6,那么一次显示:6,3,9,1... 思路:这个题一定会出现 ...

  10. SQL Server 链接数据库 error:40

    链接到远程服务器的话,经常犯这个错误,所以做个笔记,省的每次去百度. 1.如果使用的是 local 链接,只需要启动服务就可以了(如下图) 2.如果是远程链接的话,那么是需要启动TCP协议的,步骤如下