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

UVa120 - Stacks of Flapjacks (STL)

Background 背景 Stacks and Queues are often considered the bread and butter of data structures and fi...
  • a197p
  • a197p
  • 2015年06月20日 21:27
  • 432

uva 120——Stacks of Flapjacks

题意:一个非常有趣的问题,就是给一摞煎饼,然后从下面拿起来一张,然后把该张上面的所有馅饼反转,求最后使得馅饼从小到大的最小的步数。   思路:贪心。每次都把没排好序的最大数反转到最上面,然后在一次...
  • bobodem
  • bobodem
  • 2015年11月06日 08:53
  • 239

uva 120 Stacks of Flapjacks 煎饼

先放好第K大的煎饼,然后放好k-1大的煎饼。 因为如果要放对第k-1大的煎饼的位置,所有被变更位置的煎饼一定在区间[1,k-1]内,不会影响到刚才放好的第k大煎饼。 /**==========...
  • yskyskyer123
  • yskyskyer123
  • 2016年02月23日 21:54
  • 388

uva 120 Stacks of Flapjacks(模拟)

题意是选定一个位置从后往
  • u013508213
  • u013508213
  • 2014年07月01日 20:35
  • 282

UVA 120 --- Stacks of Flapjacks 模拟

Stacks of Flapjacks Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu ...
  • u013014691
  • u013014691
  • 2014年12月21日 17:55
  • 477

uva 120 Stacks of Flapjacks

uva 120 Stacks of Flapjacks
  • tengfei461807914
  • tengfei461807914
  • 2016年04月17日 11:39
  • 209

uva - 120 - Stacks of Flapjacks

//#define Local #include #include #include #include using namespace std; #define MAX 1000 st...
  • u013545222
  • u013545222
  • 2014年02月02日 22:21
  • 468

UVa 120 Stacks of Flapjacks

#include #include #include #include #include #include #include #include #include #include using name...
  • qq_34446253
  • qq_34446253
  • 2016年05月11日 19:39
  • 149

UVA 120 Stacks of Flapjacks

题目煎饼堆分析给你一个煎饼堆哦,再给你一个小铲铲,要你呀,从左到右(自上向底),从小到大排序啊,每次铲呢,只能将铲上的煎饼反转,打出每次铲的位置。思路一个一个固定最大的煎饼到达最下,只需要先把它移到顶...
  • lab103
  • lab103
  • 2015年07月26日 20:25
  • 207

uva 120 Stacks of Flapjacks

模拟搬移的过程,搬移的方法是将当前剩余的球里面号数最小的排到最后面,然后再交换一次,移动到正确的位置上。 #include #include #include #include #includ...
  • xiaohaowudi
  • xiaohaowudi
  • 2013年09月22日 16:00
  • 403
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVA 120 Stacks of Flapjacks (模拟+贪心)
举报原因:
原因补充:

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