zoukankan      html  css  js  c++  java
  • uva120 Stacks of Flapjacks (构造法)

    这个题没什么算法,就是想出怎么把答案构造出来就行。

    思路:越大的越放在底端,那么每次就找出还没搞定的最大的,把它移到当前还没定好的那些位置的最底端,定好的就不用管了。

    这道题要处理好输入,每次输入的一行中是带空格的,以换行符结束一组数据的输入,那么用getline()函数。再用stringstream(这个可以自动转格式),非常方便的就处理了输入的问题。另外注意max_element和min_element都是左闭右开的。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<map>
    #include<set>
    #include<vector>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<cctype>
    #include<sstream>
    using namespace std;
    #define INF 1000000000
    #define eps 1e-8
    #define pii pair<int,int>
    #define LL long long int
    #define maxn 100010
    int a[39],n;
    string s;
    void flip(int p)
    {
        for(int i=0;i<p-i;i++)//这里循环结束条件的设定有韵味
        {
            swap(a[i],a[p-i]);
        }
        printf("%d ",n-p);
    }
    int main()
    {
        //freopen("in8.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        while(getline(cin,s))
        {
            cout<<s<<endl;
            stringstream ss(s);
            n=0;
            while(ss>>a[n]) n++;
            for(int i=n-1;i>=1;i--)
            {
                int p=max_element(a,a+i+1)-a;
                if(p==i) continue;
                else if(p>0) flip(p);
                flip(i);
            }
            cout<<'0'<<endl;
        }
        //fclose(stdin);
        //fclose(stdout);
        return 0;
    }
  • 相关阅读:
    构建CMDB的一些启发
    一个NB的安全认证机制
    SQLAlchemy
    Tornado基本使用
    Tornado源码探寻(请求到来)
    Tornado源码探寻(准备阶段)
    Tornado源码探寻(开篇)
    我的个人博客网站
    IDEA/AS快捷键收集&习惯
    ubuntu命令收集
  • 原文地址:https://www.cnblogs.com/zywscq/p/4050810.html
Copyright © 2011-2022 走看看