zoukankan      html  css  js  c++  java
  • HDOJ 4699 Editor 栈 模拟


    用两个栈模拟:

    Editor

    Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
    Total Submission(s): 1913    Accepted Submission(s): 591


    Problem Description
     

    Sample Input
    8 I 2 I -1 I 1 Q 3 L D R Q 2
     

    Sample Output
    2 3
    Hint
    The following diagram shows the status of sequence after each instruction:
     

    Source
     



    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <stack>
    #include <vector>
    
    using namespace std;
    
    const int INF=0x3f3f3f3f;
    const int maxn=1001000;
    
    int Left[maxn],Right[maxn];
    int sum[maxn],maxsum[maxn];
    int nl,nr;
    
    char op[10];
    int x,T_T,sz;
    
    void init()
    {
      nl=0; nr=0;
      maxsum[0]=-INF;
      sum[0]=0;
      sz=1;
    }
    
    int nextInt()
    {
      bool ok=false;
      int ret=0; char ch;
      int xi=0;
      while(ch=getchar())
        {
          if(ch=='-'||(ch>='0'&&ch<='9'))
            {
              ok=true;
              if(ch=='-') xi=1;
              else ret=ret*10+ch-'0';
            }
          else if(ok==true) break;
        }
      if(xi) ret*=-1;
      return ret;
    }
    
    char nextChar()
    {
      char ch=0;
      while(ch=getchar())
        {
          if(ch=='D'||ch=='R'||ch=='L'||ch=='Q'||ch=='I')
            {
              return ch;
            }
        }
    }
    
    int main()
    {
      while(scanf("%d",&T_T)!=EOF)
        {
          init();
          while(T_T--)
            {
              op[0]=nextChar();
              if(op[0]=='I')
                {
                  x=nextInt();
                  Left[nl++]=x;
                  sum[sz]=sum[sz-1]+x;
                  maxsum[sz]=max(maxsum[sz-1],sum[sz]);
                  sz++;
                }
              else if(op[0]=='D')
                {
                  if(nl==0) continue;
                  nl--;
                  sz--;
                }
              else if(op[0]=='L')
                {
                  if(nl==0) continue;
                  int t=Left[nl-1];
                  nl--;
                  Right[nr++]=t;
                  sz--;
                }
              else if(op[0]=='R')
                {
                  if(nr==0) continue;
                  int t=Right[nr-1];
                  nr--;
                  Left[nl++]=t;
                  sum[sz]=sum[sz-1]+t;
                  maxsum[sz]=max(maxsum[sz-1],sum[sz]);
                  sz++;
                }
              else if(op[0]=='Q')
                {
                  int x;
                  x=nextInt();
                  printf("%d
    ",maxsum[x]);
                }
            }
        }
      return 0;
    }
    





  • 相关阅读:
    Linux 部署 .net
    转载:什么才是真正的 RESTful 架构
    Web Api资料
    nginx 配置
    Nginx 资料
    session、cookie资料
    WCF 资料
    投资
    解决在控制层springmvc框架发出的400状态的错误
    解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6741792.html
Copyright © 2011-2022 走看看