• 希望


    【题目描述】

    网页浏览器者有后退与前进按钮,一种实现这两个功能的方式是用两个栈,“前进栈”、“后退栈”。

    这里你需要实现以下几个功能:

    BACK: 如果“后退栈”为空则忽略此命令。否则将当前两面压入“前进栈”,从“后退栈”中取出栈顶页面,并设置为当前页面。

    FORWARD: 如果“前进栈”为空则忽略此命令。否则将当前两面压入“后退栈”,从“前进栈”中取出栈顶页面,并设置为当前页面。

    VISIT: 将当前页面压入“后退栈”、并将当前页面置为指定页面,并将“前进栈”置空。

    QUIT: 退出。

    假设此浏览器初始页面为http://www.acm.org/

    【输入格式】

    输入为一系列命令:BACK, FORWARD, VISIT和QUIT,页面网址为不含空格的字符串

    假设任一时刻任意时刻两个栈中的元素都不会超过100。

    最后一个命令为QUIT。

    【输出格式】

    输对于除QUIT外所有命令,输出当前页面(网址)

    如果该命令被忽略则输出“Ignored”。

    【样例输入】

    VISIT http://acm.ashland.edu/

    VISIT http://acm.baylor.edu/acmicpc/

    BACK

    BACK

    BACK

    FORWARD

    VISIT http://www.ibm.com/

    BACK

    BACK

    FORWARD

    FORWARD

    FORWARD

    QUITP

    【样例输出】

    http://acm.ashland.edu/

    http://acm.baylor.edu/acmicpc/

    http://acm.ashland.edu/

    http://www.acm.org/

    Ignored

    http://acm.ashland.edu/

    http://www.ibm.com/

    http://acm.ashland.edu/

    http://www.acm.org/

    http://acm.ashland.edu/

    http://www.ibm.com/

    Ignored

    【样例解释】

    无。

    【数据范围与规定】

    对于100%的数据,操作数量不超过1000,每行字符串长度不超过500。

    思路:模拟

    代码实现:

     1 #include<cstdio>
     2 #include<cstring>
     3 int ls,rs,lt,rt;
     4 char now[600]="http://www.acm.org/";
     5 char left[110][600],right[110][600];
     6 char ch[600];
     7 int main(){
     8     freopen("kami.in","r",stdin);
     9     freopen("kami.out","w",stdout);
    10     while(scanf("%s",ch)){
    11         if(ch[0]=='Q') return 0;
    12         if(ch[0]=='B'){
    13             if(!lt) puts("Ignored");
    14             else{
    15                 for(int i=0;now[i]||right[rt][i];i++) right[rt][i]=now[i];
    16                 rt++,lt--;
    17                 for(int i=0;now[i]||left[lt][i];i++) now[i]=left[lt][i];
    18                 puts(now);
    19             }
    20         }
    21         if(ch[0]=='F'){
    22             if(!rt) puts("Ignored");
    23             else{
    24                 for(int i=0;now[i]||left[lt][i];i++) left[lt][i]=now[i];
    25                 lt++,rt--;
    26                 for(int i=0;now[i]||right[rt][i];i++) now[i]=right[rt][i];
    27                 puts(now);
    28             }
    29         }
    30         if(ch[0]=='V'){
    31             scanf("%s",ch);
    32             for(int i=0;now[i]||left[lt][i];i++) left[lt][i]=now[i];
    33             lt++,rt=0;
    34             for(int i=0;now[i]||ch[i];i++) now[i]=ch[i];
    35             puts(now);
    36         }
    37     }
    38 }

    我开始明白名字的恶意了。

    题目来源:zhx

  • 相关阅读:
    hdu 1028 Ignatius and the Princess III (n的划分)
    CodeForces
    poj 3254 Corn Fields (状压DP入门)
    HYSBZ 1040 骑士 (基环外向树DP)
    PAT 1071 Speech Patterns (25)
    PAT 1077 Kuchiguse (20)
    PAT 1043 Is It a Binary Search Tree (25)
    PAT 1053 Path of Equal Weight (30)
    c++ 常用标准库
    常见数学问题
  • 原文地址:https://www.cnblogs.com/J-william/p/6669185.html
Copyright © 2020-2023  润新知