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 举报

相关文章推荐

UVA 120 - Stacks of Flapjacks

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

UVA 120 - Stacks of Flapjacks

题目链接:UVA 120 - Stacks of Flapjacks

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

UVA - 120 - Stacks of Flapjacks

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&p...

UVa 120 - Stacks of Flapjacks

翻饼问题,注意一下几点: 1、翻饼规则:只能从底层往上翻,也就是将前i个元素reverse,所以这里有个技巧,就是每次找到前i个元素里面最大的元素(假设是第m个),将其翻到第一层(前m个元素...

uva 120 Stacks of Flapjacks

模拟搬移的过程,搬移的方法是将当前剩余的球里面号数最小的排到最后面,然后再交换一次,移动到正确的位置上。 #include #include #include #include #includ...

UVa 120 - Stacks of Flapjacks

传送门UVa 120 - Stacks of Flapjacks

UVa 120 - Stacks of Flapjacks

题意:给一摞随意摞的煎饼,要按直径从上到下递增的顺序排列,求翻的顺序。 思路:贪心。 1,读取煎饼数据,新建一个数组,复制数据,排序,作为参考。 2,从最大直径(maxNum)的煎饼开始,看其是否在底...

uva 120 - Stacks of Flapjacks

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

UVA - 120 Stacks of Flapjacks

自己对该题的一些细节的分析,作为以后复习资料

UVa 120 - Stacks of Flapjacks

Stacks of Flapjacks Background Stacks and Queues are often considered the bread and ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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