Prince and little Princess-2 | ||||||
| ||||||
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);
}
}
}
}