浏览器(YACS)

题目描述

所有的网页浏览器都有访问、前进与后退按钮,它们的工作原理如下:

  1. 访问操作需要用户提供一个网址,浏览器将会访问该网址,并将该网址的前继设为跳转前的网址;
  2. 后退操作会检查当前网址是否有前继(除第一个网址外,每个网址都有前继),如果有,浏览器将访问当前网址的前继;
  3. 前进是用于抵消后退的:
    • 若前一步是后退,浏览器退回至后退前的网页。
    • 若前一步是访问,忽略这条前进操作。
    • 若前一步也是前进,若上步前进已经抵消了一个后退,则根据更早的操作确定前进的作用,否则,忽略这条操作。

给定 n 条操作,请你模拟浏览器的行为,并输出它执行每条操作时所访问的网址。

输入格式

第一行:单个正整数 n 表示操作数量;
接下来 n 行:每行表示一步操作,

  • 访问以字母 v 开头,后接一条网址,保证该网址中间没有空格或者其他不可见字符;
  1. 后退仅有一个字母 b
  2. 前进仅有一个字母 f
输出格式

共 n 行:对每一步操作,

  • 如果浏览器访问了某个网址,则输出该网址;
  • 如果浏览器忽略了这部操作,则输出一个 ?
数据范围

保证每个输入的网址长度不会超过 30;

  • 对于 30% 的数据,1≤n≤1000;
  • 对于 60% 的数据,1≤n≤10000;
  • 对于 100% 的数据,1≤n≤50000。
样例数据:

输入1

10
v iai.sh.cn
v scs.sh.cn
v yacs.club
b
b
f
f
f
v ioinformatics.org
f

输出1: 

iai.sh.cn
scs.sh.cn
yacs.club
scs.sh.cn
iai.sh.cn
scs.sh.cn
yacs.club
?
ioinformatics.org
?

 输入2:

8
v iai.sh.cn
v taobao.com
v baidu.com
b
b
v tmall.com
f
b

 输出2:

iai.sh.cn
taobao.com
baidu.com
taobao.com
iai.sh.cn
tmall.com
?
iai.sh.cn

解析:

这道题用两个栈就很方便地解决,大致流程如下:
 

微信图片_20240526200020.png

2024-05-26_20-03.png

2024-05-26_20-05.png

代码: 
#include<bits/stdc++.h>
using namespace std;
stack<string> a,b;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		char c;
		cin>>c;
		if(c=='v'){
			string s;
			cin>>s;
			cout<<s<<endl;
			a.push(s);
			while(!b.empty()){
				b.pop();
			}
		}
		else if(c=='b'){
			if(a.size()>1){
				b.push(a.top());
				a.pop();
				cout<<a.top()<<endl;
			}
			else cout<<"?"<<endl;
		}
		else {
			if(!b.empty()){
				a.push(b.top());
				b.pop();
				cout<<a.top()<<endl;
			}
			else cout<<"?"<<endl; 
		}
	}
	return 0;
}

大概就是这样。

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值