洛谷:P2952 [USACO09OPEN]牛线Cow Line:题解

mac2022-06-30  89

题目链接:https://www.luogu.org/problemnew/show/P2952

分析:

这道题非常适合练习deque双端队列,~~既然是是练习的板子题了,建议大家还是练练deque,下面来简单讲解一下deque的一些操作。

clear()clear()clear():清空队列

pushpushpush_back()back()back():从尾部插入一个元素。

pushpushpush_front()front()front():从头部插入一个元素。

deque双端队列的先进就在这里,它可以两端都支持同样的操作。

size()size()size():返回队列元素个数

front()front()front():返回队列首部元素。

back()back()back():返回尾部元素。

poppoppop_back()back()back():弹出队尾元素。

poppoppop_front()front()front():弹出队首元素。

empty()empty()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; }

转载于:https://www.cnblogs.com/vercont/p/10210021.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)