B3403 [Usaco2009 Open]Cow Line 直线上的牛 deque

it2022-05-09  26

deque真的秀,queue和stack。。。没啥用了啊。操作差不多,就是在前面加一个front||back_就行了。

题干:

题目描述

 

题目描述     约翰的N只奶牛(编为1到N号)正在直线上排队.直线上开始的时候一只牛也没有.接下来发生了S(1≤S≤100000)次事件,一次事件可能是以下四种情况之一:   .一只奶牛加入队伍的左边(输入“AL”).   .一只奶牛加入队伍的右边(输入“AR”).   ·K只队伍左边奶牛离开(输入“DLK”).   ·K只队伍右边奶牛离开(输入“DRK”).     请求出最后的队伍是什么样.     数据保证离开的奶牛不会超过队伍里的奶牛数,最后的队伍不空

 


输入格式

 

    第1行输入S,之后S行每行描述一次事件,格式如题目描述所示

 


输出格式

 

      由左到右输出队伍最后的情况.

 


样例输入

10 A L A L A R A L D R 2 A R A R D L 1 A L A R

样例输出

7 2 5 6 8

提示

 

 


题目来源

代码:

#include<iostream> #include<cstdio> #include<cmath> #include<ctime> #include<queue> #include<algorithm> #include<deque> #include<cstring> using namespace std; #define duke(i,a,n) for(int i = a;i <= n;i++) #define lv(i,a,n) for(int i = a;i >= n;i--) #define clean(a) memset(a,0,sizeof(a)) const int INF = 1e9 + 7; typedef long long ll; typedef double db; template <class T> void read(T &x) { char c; bool op = 0; while(c = getchar(), c < '0' || c > '9') if(c == '-') op = 1; x = c - '0'; while(c = getchar(), c >= '0' && c <= '9') x = x * 10 + c - '0'; if(op) x = -x; } template <class T> void write(T x) { if(x < 0) putchar('-'), x = -x; if(x >= 10) write(x / 10); putchar('0' + x % 10); } deque <int> de; char s[10]; int num = 0; int main() { int n; read(n); duke(i,1,n) { scanf("%s",s); if(s[0] == 'A') { scanf("%s",s); if(s[0] == 'L') de.push_front(++num); else de.push_back(++num); } else { int x; scanf("%s",s); read(x); if(s[0] == 'L') { while(x != 0) { // cout<<de.front()<<endl; de.pop_front(); x--; } } else { while(x != 0) { // cout<<de.back()<<endl; de.pop_back(); x--; } } } } while(!de.empty()) { printf("%d\n",de.front()); de.pop_front(); } return 0; }

 

转载于:https://www.cnblogs.com/DukeLv/p/9570353.html

相关资源:数据结构—成绩单生成器

最新回复(0)