UVA - 120Stacks of Flapjacks (摊煎饼。。)

/*

这题使我记起了以前很多忘掉的东西,例如sstream(分割流),deque(双端队列),还有众多函数(STL里的)。值得收藏

值得注意的是这题的序号问题,(因为要求输出翻转的位置),序号从右往左为1-n;

*/

题目大意:

一摞煎饼,煎饼有直径这一属性,从下往上摞,遗憾的是英文看不懂,他给的样例从左往右,表示从上到下。保证按题中所给算法(反转某一位置之上的所有煎饼)使得最后的序列为从小到大排列;

解题思路:

题中所给算法如下例:

2 3 4 1  5  -->1 2 3 4  5

5应该在最后一位,所以2 3  4 1 5不翻转;

检查2位置,不为次小值,寻找此位置之前最大的数 --4  找到后观察其位置是否为顶部,不是顶部将其反转到顶部     4 3 2 1 5

然后将此位置为顶部交换得到1 2 3 4 5;

(若是顶部则直接将顶部与当前位置交换)具体做法则使用双端队列(ps:看到题目为stack一度想用栈),逆序存储,那么队列顶部就是这摞的底部,遍历即可;

代码:

#include<iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include<set>
#include <cstdio>
#include<iterator>
#include <sstream>
#include <cmath>
#include <deque>
using namespace std;

int main()
{
    string line;
    for (;getline(cin,line);cout<<"0"<<endl)  //这个操作使我眼前一亮,简单但是很有用因为他最后要输出一个0(虽然并不用这么做)
    {
        int x;
        int max_=0;
        int length=0;
        int zzzzz=0;
        stringstream ss(line);        //被我遗忘的流分割操作,输入一行进行切割;
        deque<int >p;              //定义双端队列
        while (ss>>x)
        {
            length++;
            if (max_<x) max_=x;
            if (zzzzz==0)
            {
                cout<<x;
                zzzzz=1;
            }
            else cout<<" "<<x;
            p.push_front(x);            //把数逆向输入队列。
        }
        cout<<endl;
        deque<int >::iterator it;
        for (it=p.begin(); it!=p.end(); it++)
        {
            //cout<<"asdas"<<endl;
            deque<int >::iterator max_pos;
            max_pos=max_element(it,p.end());
            if (it!=max_pos)
            {
                if(max_pos!=p.end()-1)
                {
                    reverse(max_pos,p.end());
                    cout<<distance(p.begin(),max_pos)+1<<" ";
                }
                reverse(it,p.end());
                cout<<distance(p.begin(),it)+1<<" ";
            }
        }
    }
}

PS:

时间: 2024-10-31 17:32:45

UVA - 120Stacks of Flapjacks (摊煎饼。。)的相关文章

uva Stacks of Flapjacks

                                                 Stacks of Flapjacks  题目链接:Click Here~ 题目描写叙述:     给你n个数.要你得到的最后结果是从下到大排序.可是给出的序列不一定是有序你.要通过你的调整.问:要经过哪几个位置上的数的调整? 算法分析:     一開始,我的思路是直接模拟一边消除逆序数就能够了,由于我看数据非常小,仅仅有30.可是提交之后却TEL了. 后来上网查了一下.看到有一个人的思路还是非

UVa120 Stacks of Flapjacks (构造法)

链接:http://vjudge.net/problem/18284 分析:摊煎饼问题.以从大到小的顺序依次把每个数排到正确的位置,比如当处理第i大的煎饼时,是不会影响到第1,2,3,...,i-1大的煎饼的(它们已经正确的翻到了煎饼堆底部的i-1个位置上),翻煎饼的方法是先翻到最上面,然后翻到正确的位置,翻好了以后煎饼堆底部i个位置上的煎饼都已经正确放好就不用管了,接下来就是找第i+1大的煎饼放到下数上第i+1个位置上,不过对于当前最大煎饼的位置要分类讨论,如果已经在其正确位置上就什么也不用做

计划,,留

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 一.<算法竞赛入门经典> 刘汝佳 (UVaOJ 351道题) 以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html "AOAPC I"

算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发.   一.UVaOJ http://uva.onlinejudge.org  西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ.   二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html   "AO

(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html “AOAPC I”是刘汝佳(大

IOS之KVC全解

一  KVC的基本概念 KVC是Key Value Coding的缩写,意思是键值编码. 在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象属性的方法,这个方法可以不通过getter/setter方法来访问对象的属性. 用KVC可以间接访问对象属性的机制.通常我们使用valueForKey 来替代getter 方法,setValue:forKey来代替setter方法. ———————————————————————————————————————————————————

进击的雨燕--------------集合类型

Swift 语言提供Arrays.Sets和Dictionaries三种基本的集合类型用来存储集合数据.数组(Arrays)是有序数据的集.集合(Sets)是无序无重复数据的集.字典(Dictionaries)是无序的键值对的集. Swift 语言中的Arrays.Sets和Dictionaries中存储的数据值类型必须明确.这意味着我们不能把不正确的数据类型插入其中.同时这也说明我们完全可以对取回值的类型非常自信. 注意:Swift 的Arrays.Sets和Dictionaries类型被实现

IOS 高级开发 KVC(一)

熟练使用KVC 可以再开发过程中可以给我们带来巨大的好处,尤其是在json 转模型的时候,KVC让程序员摆脱了繁琐无营养的代码堆积.减少代码量就是减少出错的概率.KVC 用起来很灵活,这种灵活的基础是严格的命名要求.这种命名要求其实是一种约定.再程序的世界里,约定的作用远远大于开发本身,良好的约定可以使程序员摆脱很多判断,也减少了错误.KVC有如下几点作用: 1).直接赋值 使用KVC 可以对对象的某个属性进行赋值.假定现在我们有一个Person 类,类中包含两个属性:一个是只读的name 属性

集合类型

http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapter2/04_Collection_Types.html 本页包含内容: 数组(Arrays) 字典(Dictionaries) 集合的可变性(Mutability of Collections) Swift 语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储相同类型的数据.字典虽然无序存储相同类型数据值但是需要由独有的标识符引用