ZOJ 4016(Mergeable Stack)stl list完美解决

xiaoxiao2021-02-28  45

Mergeable Stack

问题分析

按照题目要求模拟栈操作。用stack的话会超内存,所以,蒟蒻我当时没A掉。后来大佬告诉我可以用list的一个splice函数完美解决QAQ,甚至有大神用数组模拟AC。 这里就稍微说一下splice的用法,就是将链表A和B拼接在一起,并且将链表B中的元素清空。 A.splice(postion,B);postion代表从A的哪个位置开始拼接。

#include <iostream> #include <stdio.h> #include <list> using namespace std; typedef long long ll; const int N = 3e5+3; list<int> list1 [N]; int main() { // freopen("in.txt","r",stdin); int T,op,s,t,v; cin>>T; while(T--) { int n,q; scanf("%d%d",&n,&q); for(int i = 1; i <= n; ++i)//这一步也很重要,不要忘了 list1[i].clear(); while (q--) { scanf("%d",&op); if(op==1){ scanf("%d%d",&s,&v); list1[s].push_back(v); }else if(op==2){ scanf("%d",&s); if(!list1[s].empty()){ printf("%d\n",list1[s].back()); list1[s].pop_back(); }else printf("EMPTY\n"); }else if(op==3){ scanf("%d%d",&s,&t); //将栈t里的每一个元素按顺序移到栈s顶部 list1[s].splice(list1[s].end(),list1[t]); } } } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2632822.html

最新回复(0)