1002—度度熊学队列
1002—度度熊学队列
题目:
思路:
模拟题,用stl的list 按照题目的要求进行操作即可。
注意:如果是用stl的容器判断是否为空,应该尽量用xx.empty() 而不是用size()==0,个人猜测是size()函数会遍历元素进行计算,从而产生多余的计算量。笔者因此超时了一发。
代码:
#include <cstdio> #include <list> using namespace std; const int maxn = 150000+20; list<int> lists[maxn]; void read(int &x) { char ch = getchar(); x = 0; for (; ch < '0' || ch > '9'; ch = getchar()); for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0'; } void init(int n) { for(int i=1; i<=n; i++) lists[i].clear(); } int main() { int n,q; while(~scanf("%d%d",&n,&q)) { init(n); while(q--) { int a,b,c,d; read(a); read(b); read(c); if(a==1) { read(d); if(c==0) { lists[b].push_front(d); } else { lists[b].push_back(d); } } else if(a==2) { if(lists[b].empty()) ///size T了 { puts("-1"); } else { if(c==0) { printf("%d\n",lists[b].front()); lists[b].pop_front(); } else { printf("%d\n",lists[b].back()); lists[b].pop_back(); } } } else { read(d); if(d==0) { lists[b].splice(lists[b].end(), lists[c]); } else { lists[c].reverse(); lists[b].splice(lists[b].end(), lists[c]); } } } } return 0; }