hrbust 1578 哈理工oj 1578 Prince and little Princess-2【双向队列】

Prince and little Princess-2
Time Limit: 1000 MSMemory Limit: 65536 K
Total Submit: 197(62 users)Total Accepted: 61(60 users)Rating: Special Judge: No
Description
这一厢,小公主对王子念念不忘。那一厢,王子也发现自己喜欢上了那个大雨中偶遇的小公主。
然而,邻国有一个公主也喜欢王子。她发现王子喜欢上小公主后,就不高兴了。她央求一个巫女给了她一个口袋。这个口袋很特别,每当小公主想要吃苹果的时候,公主拿到的并不是口袋顶部的苹果,而是口袋底部的苹果。
结果小公主每次都预料错了自己吃的苹果的大小,譬如小公主给出back的命令,得到的是袋顶苹果的大小,但是给出pop命令后拿到的居然是袋底的苹果,如果这个苹果很大,小公主就吃撑了。日复一日,不按常理吃饭的结果是小公主病了。
Input
有多组输入样例,每次测试样例第一行有一个数字n;
第一行一个正整数n(n <= 50),表示口袋里现在苹果的数量。袋底的苹果编号为0,从袋底到袋顶标号依次变大,袋顶的苹果标号为n-1。这次由于这个巫女的袋子,小公主每次吃到的都是最底的那个苹果了。
第二行有有n个整数,每个整数表示从0 到n-1号苹果。
接下来有若干行命令,保证不会有不合法的命令。命令有5种形式:
push a,a是一个正整数,表示往口袋里装重量为a的苹果;
pop,表示看看袋子底部苹果的重量并将其从袋子中取出;
back, 表示看看袋子顶部苹果的重量但并不取出;
empty, 表示看一看口袋里是否还有苹果,如果还有呢就输出”^_^”,要是没有了就输出"T^T"..
end表示小公主要结束了,不再折磨可怜的口袋了。
Output
对于每个 pop 命令输出小公主取出的苹果的重量;
对于empty命令,输出正确的答案;
对于 back 命令,输出口袋顶部苹果的重量。
每个命令答案输出为一行。
Sample Input
5
26 18 3 2 1
push 1
back
pop
back
empty
pop
pop
pop
back
pop
pop
empty
end
Sample Output
1
26
1
^_^
18
3
2
1
1
1
T^T
Author
曾卓敏@Amber

无意间翻到的一个题,这个题里边所有操作都可以用STL里边的deque双向队列来实现。

一些基础操作:

push---------------------->push_back()/push_front()

pop------------------------>pop_back()/pop_front()

top/front------------------>x.front()/x.back()

询问队列中元素个数:s.size()

AC代码:

#include<stdio.h>
#include<string.h>
#include<deque>
using namespace std;
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        deque<int >s;
        for(int i=0;i<n;i++)
        {
            int k;
            scanf("%d",&k);
            s.push_back(k);
        }
        char a[25];
        while(1)
        {
            scanf("%s",a);
            if(strcmp(a,"end")==0)break;
            if(strcmp(a,"pop")==0&&s.size()!=0)
            {
                printf("%d\n",s.front());
                s.pop_front();
            }
            if(strcmp(a,"back")==0&&s.size()!=0)
            {
                printf("%d\n",s.back());
            }
            if(strcmp(a,"empty")==0)
            {
                if(s.size()==0)
                {
                    printf("T^T\n");
                }
                else
                {
                    printf("^_^\n");
                }
            }
            if(strcmp(a,"push")==0)
            {
                int k;
                scanf("%d",&k);
                s.push_back(k);
            }
        }
    }
}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值