zoukankan      html  css  js  c++  java
  • B3403 [Usaco2009 Open]Cow Line 直线上的牛 deque

    deque真的秀,queue和stack。。。没啥用了啊。操作差不多,就是在前面加一个front||back_就行了。

    题干:

    题目描述

    题目描述
        约翰的N只奶牛(编为1到N号)正在直线上排队.直线上开始的时候一只牛也没有.接下来发生了S(1≤S≤100000)次事件,一次事件可能是以下四种情况之一:
      .一只奶牛加入队伍的左边(输入“AL”).
      .一只奶牛加入队伍的右边(输入“AR”).
      ·K只队伍左边奶牛离开(输入“DLK”).
      ·K只队伍右边奶牛离开(输入“DRK”).
        请求出最后的队伍是什么样.
        数据保证离开的奶牛不会超过队伍里的奶牛数,最后的队伍不空

    输入格式

        第1行输入S,之后S行每行描述一次事件,格式如题目描述所示

    输出格式

     
        由左到右输出队伍最后的情况.

    样例输入

    10
    A L
    A L
    A R
    A L
    D R 2
    A R
    A R
    D L 1
    A L
    A R

    样例输出

    7
    2
    5
    6
    8

    提示


    题目来源

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<ctime>
    #include<queue>
    #include<algorithm>
    #include<deque>
    #include<cstring>
    using namespace std;
    #define duke(i,a,n) for(int i = a;i <= n;i++)
    #define lv(i,a,n) for(int i = a;i >= n;i--)
    #define clean(a) memset(a,0,sizeof(a))
    const int INF = 1e9 + 7;
    typedef long long ll;
    typedef double db;
    template <class T>
    void read(T &x)
    {
        char c;
        bool op = 0;
        while(c = getchar(), c < '0' || c > '9')
            if(c == '-') op = 1;
        x = c - '0';
        while(c = getchar(), c >= '0' && c <= '9')
            x = x * 10 + c - '0';
        if(op) x = -x;
    }
    template <class T>
    void write(T x)
    {
        if(x < 0) putchar('-'), x = -x;
        if(x >= 10) write(x / 10);
        putchar('0' + x % 10);
    }
    deque <int> de;
    char s[10];
    int num = 0;
    int main()
    {
        int n;
        read(n);
        duke(i,1,n)
        {
            scanf("%s",s);
            if(s[0] == 'A')
            {
                scanf("%s",s);
                if(s[0] == 'L')
                de.push_front(++num);
                else
                de.push_back(++num);
            }
            else
            {
                int x;
                scanf("%s",s);
                read(x);
                if(s[0] == 'L')
                {
                    while(x != 0)
                    {
    //                    cout<<de.front()<<endl;
                        de.pop_front();
                        x--;
                    }
                }
                else
                {
                    while(x != 0)
                    {
    //                    cout<<de.back()<<endl;
                        de.pop_back();
                        x--;
                    }
                }
            }
        }
        while(!de.empty())
        {
            printf("%d
    ",de.front());
            de.pop_front();
        }
        return 0;
    }
  • 相关阅读:
    C++调用WebService
    vs2005 环境的字体和颜色的设置
    自娱自乐~经典24点游戏
    再探利用C++的STL和堆栈编程思想实现数学四则运算计算结果
    如何在Linux中关闭apache服务(转)
    ios推送:本地通知UILocalNotification
    ASIHTTPRequest的使用(转)
    实战新浪微博、腾讯微博的分享功能(转)
    UIImagePickerController拍照与摄像(转)
    iOS通过http post上传图片 (转)
  • 原文地址:https://www.cnblogs.com/DukeLv/p/9570353.html
Copyright © 2011-2022 走看看