zoukankan      html  css  js  c++  java
  • zoj4016 Mergeable Stack

    题意:对n个栈,有q次操作。每个操作可能为三种情况中的一种:1.将v插入到s栈的顶端;2.输出s栈的栈顶(若栈为空则输出empty);3.将栈t插入到栈s的栈顶。

    开始考虑到指针可能会mle,用数组模拟链表来实现。迷之wa,中间少写一句,若s栈为空,则s栈的栈顶变为t栈的栈顶。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 
     5 const int maxn = 3e5+10;
     6 struct node{
     7     long long data;
     8     long long pre;
     9 }arr[maxn];
    10 struct list{
    11     long long top;
    12     long long head;
    13 }lst[maxn];
    14 long long used;
    15 
    16 void insert(long long s, long long v){
    17     arr[used].data = v;
    18     arr[used].pre = lst[s].top;
    19     lst[s].top = used;
    20     if (lst[s].head == -1)
    21         lst[s].head = used;
    22     used++;
    23 }
    24 void pop(long long s){
    25     if (lst[s].top == -1)
    26         printf("EMPTY
    ");
    27     else{
    28         printf("%d
    ", arr[lst[s].top].data);
    29         lst[s].top = arr[lst[s].top].pre;
    30         if (lst[s].top == -1)
    31             lst[s].head = -1;
    32     }
    33 }
    34 void move(long long s, long long t){  //把t放到s上 
    35     if (lst[t].top != -1){
    36         arr[lst[t].head].pre = lst[s].top;
    37         if (lst[s].top==-1) lst[s].head=lst[t].head; 
    38         lst[s].top = lst[t].top;
    39         lst[t].top = lst[t].head = -1;
    40     }
    41 }
    42 
    43 int main(){
    44     int T;
    45     scanf("%d", &T);
    46 
    47     while (T--){
    48         long long n,q;
    49         scanf("%lld%lld", &n, &q);
    50         used = 0;
    51         memset(lst, -1, sizeof(lst));
    52         long long s,t,mod;
    53         long long v;
    54         while (q--){
    55             scanf("%lld", &mod);
    56             if (mod == 1){
    57                 scanf("%lld%lld", &s, &v);
    58                 insert(s, v);
    59             }
    60             else if (mod == 2){
    61                 scanf("%lld", &s);
    62                 pop(s);
    63             }
    64             else {
    65                 scanf("%lld%lld", &s, &t);
    66                 move(s, t);
    67             }
    68         }
    69     }
    70 
    71     return 0;
    72 }
  • 相关阅读:
    H5+ 分享到微信、朋友圈代码示例
    H5+ 重写在线升级版本比较代码
    H5+ a页面打开b页面,b页面加载成功后关闭当前页面,闪屏的规避解决方案
    MUI
    MUI
    MUI
    MUI
    Vue实战之【企业开发常见问题】
    step1:准备歌词之《前端开发是个啥》
    element-ui级联选择器(Cascader)获取级联对象 (主要是想获取:label值)
  • 原文地址:https://www.cnblogs.com/changer-qyz/p/8757172.html
Copyright © 2011-2022 走看看