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 }
  • 相关阅读:
    [iOS]delegate和protocol
    Objective-c中@interface、@implementation、@protocal
    iOS应用的真机调试
    2016最新Java笔试题集锦
    Java面试题相关内容
    JSP面试题及答案
    JAVA面试题相关基础知识
    mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI
    Java中equals和==的区别
    java的Arrays类的应用
  • 原文地址:https://www.cnblogs.com/changer-qyz/p/8757172.html
Copyright © 2011-2022 走看看