博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

网页跳转

网页跳转

Description

蒜头君每天都在用一款名为 “蒜厂浏览器” 的软件。在这个浏览器中,一共三种操作:打开页面、回退和前进。它们的功能如下:

打开页面:在地址栏中输入网址,并跳转到网址对应的页面;
回退:返回到上一次访问的页面;
前进:返回到上次回退前的页面,如果上一次操作是打开页面,那么将无法前进。

现在,蒜头君打开浏览器,进行了一系列操作,你需要输出他每次操作后所在页面的网址。

Input

第一行输入一个整数 t(0 < t <= 10),表示有 t 组数据。

第二行输入一个整数 n(0 < n <= 100000), 表示蒜头君的操作次数。

接下来一共 n 行,每行首先输入一个字符串,如果是VISIT,后面接着输入一个不含有空格和换行的网址(网址长度小于 100),表示蒜头君在浏览器地址栏中输入的网址;如果是BACK,表示蒜头君点击了回退按钮;如果是FORWARD,表示蒜头君点击了前进按钮。

Output

对于每次操作,如果蒜头君能操作成功,输出蒜头君操作之后的网址,否则输出"Ignore"。假设蒜头君输入的所有网址都是合法的。

Sample Input 1

1 
10  
VISIT https://www.jisuanke.com/course/476
VISIT https://www.taobao.com/
BACK  
BACK  
FORWARD  
FORWARD  
BACK  
VISIT https://www.jisuanke.com/course/429
FORWARD  
BACK  

Sample Output 1

 
https://www.jisuanke.com/course/476
https://www.taobao.com/
https://www.jisuanke.com/course/476
Ignore
Ignore
https://www.taobao.com/
Ignore
https://www.jisuanke.com/course/476
https://www.jisuanke.com/course/429
Ignore
https://www.jisuanke.com/course/476

Hint

这题本质上其实是考察栈的使用,用两个栈可以维护,一个栈用来保存回退的网页信息,一个栈用来保存前进的网页信息。重新VISIT一个网页的时候,应该清空保存前进的栈。

思路

这题用栈来做,定义两个栈,一个栈保存后退的网页,一个栈保存前进的网页,当中间有visit 的时候,直接清空保存前进的网页那个栈。因为访问新网页,就相当于无法前进了。(注意在任何情况下想要访问栈顶,都要先看栈是否空。如果访问空栈顶或者 pop 空的栈都会出现段错误。)

#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main(){
    int t;
    cin >> t;
   while(t--){
       int n;
       stack<string> s1,s2;
       string step,web;
       cin>>n;
       while(n--){
           cin>>step;
           if(step=="VISIT"){
               cin>>web;
               s1.push(web);
               cout<<web<<endl;
               while(!s2.empty()){s2.pop();}
           }
           else if(step=="BACK"){
               if(s1.size()<=1){cout<<"Ignore"<<endl;}
               else{
                   s2.push(s1.top());
                   s1.pop();
                   cout<<s1.top()<<endl;
               }
           }
           else{
               if(!s2.empty()){
               s1.push(s2.top());
               cout<<s1.top()<<endl;
               s2.pop();
              }
               else{
                   cout<<"Ignore"<<endl;
               }
           }
       }
   }
    return 0;
}
posted @ 2020-06-17 11:05  5656566  阅读(404)  评论(0)    收藏  举报