UVA 120 Stacks of Flapjacks (模拟+贪心)

原创 2016年05月31日 22:44:10

题意:烙煎饼,给最多30个煎饼,每个煎饼对应一个数字,数字的序列可能是无序的,每个煎饼对应的编号是n~1(换句话说,第一个煎饼的编号是n,以此类推),你可以做这种操作:选取一个煎饼k,可以使得k~n之间的煎饼反转。最终经过多次这种操作使得煎饼的数字排列是升序的,要求输出先后选取的所有的k值

注意给的数字可能是重复的

代码如下:

#include<iostream>
#include<sstream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
char str[35];
int a[35];
int k;
int findMax(int endPos)
{
    int pos=1,maxx=a[1];
    for(int i=2; i<=endPos; i++)
        if(a[i]>=maxx) pos=i,maxx=a[i];
    return pos;
}
bool pan()
{
    int s=a[1];
    for(int i=2; i<k; i++)
        if(a[i]<s) return false;
    return true;
}
void iReverse(int len)
{
    for(int i=1; i<=len/2; i++)
    {
        int t;
        t=a[i],a[i]=a[len-i+1],a[len-i+1]=t;
    }
}
int main()
{
    vector<int> road;
    memset(str,0,sizeof(str));
    while(gets(str))
    {
        road.clear();
        k=1;
        int x;
        stringstream s(str);
        while(s>>x) a[k++]=x;
        int lim=k-1;
        while(true)
        {
            int maxPos=findMax(lim);
            if(maxPos!=lim)
            {
                if(maxPos!=1)
                {
                    road.push_back(k-maxPos);
                    iReverse(maxPos);
                }
                if(pan()) break;
                road.push_back(k-lim);
                iReverse(lim);
            }
            lim--;
        }
        printf("%s\n",str);
        if(!road.empty()){
        cout<<road[0];
        for(int i=1; i<road.size(); i++)
            cout<<" "<<road[i];
        cout<<" "<<"0"<<endl;}
        else cout<<"0"<<endl;
        memset(str,0,sizeof(str));
    }
}



版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/kuhuaishuxia

相关文章推荐

HDU 搜索进阶专题

HDU 1043 Eight 涉及到人生完不完整的一道题,有位大神总结出了八数码的8重境界,可见其经典程度无出其右~~ A*: 因为每次移动都会影响一个点的曼哈顿距离(不算x),构造h()为所有数...

LightOJ - 1265 Island of Survival 期望

题目大意:有一个生存游戏,里面t只老虎,d只鹿,还有一个人,每天都要有两个生物碰面,现在有以下规则 1.老虎和老虎碰面,两只老虎就会同归于尽 2.老虎和人碰面或者和人碰面,老虎都会吃掉对方 3....

UVa 120 Stacks of Flapjacks (STL deque&reverse)

120 - Stacks of Flapjacks Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_...

UVA 120 Stacks of Flapjacks(翻煎饼,啦啦啦啦~)

题目大意: 给你一叠薄煎饼,请你写一个程序来指出要如何安排才能使这些薄煎饼由上到下依薄煎饼的半径由小到大排好。所有的薄煎饼半径均不相同。要把薄煎饼排好序需要对这些薄煎饼做翻面(flip)的动作。方法是...

Uva 120 Stacks of Flapjacks

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

UVA 120 - Stacks of Flapjacks

题目大意:一摞盘子,从上到下。个数1= 思路:将按输入顺序输入的数字与输入后排过序的数字从最底部开始作比较,如果相同,则向上继续比较,如果不同,则在输入顺序中找与排序后的该位置值相等的值并进行反转,...
  • fzydao
  • fzydao
  • 2011年11月29日 22:26
  • 829

uva - 120 - Stacks of Flapjacks

//#define Local #include #include #include #include using namespace std; #define MAX 1000 st...

UVa OJ 120 - Stacks of Flapjacks

UVa OJ 120 - Stacks of FlapjacksProblem  有一叠煎饼正在锅里。煎饼共有n(n≤30)张,每张都有一个数字,代表它的大小,如 图8-11所示。厨师每次可以选择一个...

uva120 Stacks of Flapjacks 入门经典II 第八章例题8-1

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_probl...

UVA120 - Stacks of Flapjacks

Stacks of Flapjacks Time limit: 3.000 seconds 题意: 锅子里面有一叠煎饼,一共n张,每张煎饼标有一个数字,厨师可以选择一个数k,把从锅底数第k张上面...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVA 120 Stacks of Flapjacks (模拟+贪心)
举报原因:
原因补充:

(最多只允许输入30个字)