网页跳转
网页跳转
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;
}
浙公网安备 33010602011771号