洛谷:P2952 [USACO09OPEN]牛线Cow Line:题解
题目链接:https://www.luogu.org/problemnew/show/P2952
分析:
这道题非常适合练习deque双端队列,~~既然是是练习的板子题了,建议大家还是练练deque,下面来简单讲解一下deque的一些操作。
clear():清空队列
push_ back():从尾部插入一个元素。
push_ front():从头部插入一个元素。
deque双端队列的先进就在这里,它可以两端都支持同样的操作。
size():返回队列元素个数
front():返回队列首部元素。
back():返回尾部元素。
pop_ back():弹出队尾元素。
pop_ front():弹出队首元素。
empty():检查队列是否为空。
...
...
...
然后输出的方法多种多样,我选择使用迭代器,具体详见代码。
代码:
#include<cstdio>
#include<deque>
using namespace std;
deque<int>q;
int main()
{
int s;
scanf("%d\n",&s);
int cnt=0;
for(int j=1;j<=s;j++)
{
char c1,c2;
int c3;
scanf("%c %c",&c1,&c2);
if(c1=='A')
{
if(c2=='L')
{
q.push_front(++cnt);
}
else
{
q.push_back(++cnt);
}
if(j!=s)
scanf("\n");
}
else
{
scanf("%d",&c3);
if(j!=s)
scanf("\n");
if(c2=='L')
{
for(int i=1;i<=c3;i++)
{
q.pop_front();
}
}
else
{
for(int i=1;i<=c3;i++)
q.pop_back();
}
}
}
deque<int>::iterator it=q.begin();
for(it=q.begin();it!=q.end();it++)
{
printf("%d\n",*it);
}
return 0;
}