您的位置:首页 > 产品设计 > UI/UE

spoj Ada and Queue 模拟+deque

2017-04-05 20:42 169 查看
题目链接:http://www.spoj.com/problems/ADAQUEUE/

题意:就是让你模拟一个双端队列的front(),back(),push_back(),push_front(),reverse这些功能。

分析:这题,如果像我当时一样就很单纯直接往上面贴函数reverse就肯定会T,正确的做法是用一个标记来保存看他是否已经reverse了,所谓reverse就是头变尾,尾变头。感觉自己还是naive啊。

code:

#include<algorithm>

#include<deque>

#include<cstdio>

using namespace std;

char order[20];

int main(){

    int Q;scanf("%d",&Q);

    deque<int>dq;

    bool hasRev=false;//标记是否已经reverse

    while(Q--){

        scanf("%s",order);

        if(dq.empty()){

            if(order[0]=='b'||order[0]=='f'){

                printf("No job for Ada?\n");

                continue;

            }

        }

        if(order[0]=='b'){

            if(!hasRev){

                printf("%d\n",dq.back());

                dq.pop_back();

            }

            else{

                printf("%d\n",dq.front());

                dq.pop_front();

            }

        }

        if(order[0]=='f'){

            if(!hasRev){

                printf("%d\n",dq.front());

                dq.pop_front();

            }

            else{

                printf("%d\n",dq.back());

                dq.pop_back();

            }

        }

        if(order[0]=='r')hasRev=!hasRev;//反转

        if(order[0]=='p'){

           int num; scanf("%d",&num);

          if(!hasRev) dq.push_back(num);

          else dq.push_front(num);

        }

        if(order[0]=='t'){

           int num; scanf("%d",&num);

           if(!hasRev)dq.push_front(num);

           else dq.push_back(num);

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spoj 模拟 双端队列