您的位置:首页 > 其它

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

2016-03-18 19:04 417 查看
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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息