题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=61
题意:模拟网站前进后退的功能。要有俩个栈——一个是back栈,一个是forward栈。
BACK操作:如果(back栈为空) 输出ignore。否则,把当前网页入forward栈,back栈首出栈,打印当前网页;
FORWARD操作:如果(forward栈为空) 输出ignore。否则,把当前网页入back栈,forward栈首出栈,打印当前网页
VISIT操作:把当前网页入back栈。输入一个网页,使之成为当前网页,清空forward栈。打印当前网页
QUIT操作:退出这次操作。
分析:一共T组数据,每俩组数据输出一行空行。理解后会感觉这题挺基础的,下面看代码:
#include<stdio.h>
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main(){
int T;
cin >> T;
string cur="http://www.acm.org/",ch,v; //cur表示当前网页,ch,v用于输入
stack<string> b,f;//back、forward栈
while(T--){
while(1){
cin >> ch;//输入命令
if(ch[0]=='Q'){
while(!b.empty())//清空back栈
b.pop();
while(!f.empty())//清空forward栈
f.pop();
cur="http://www.acm.org/";
if(T!=0) cout << "\n";
break;
}else if(ch[0]=='V'){
cin >> v;
b.push(cur);
cur=v;
while(!f.empty())//清空forward栈
f.pop();
cout << cur <<"\n";
}else if(ch[0]=='B'){
if(b.empty()) {printf("Ignored\n");continue;}
f.push(cur);
cur=b.top();
b.pop();
cout << cur <<"\n";
}else if(ch[0]=='F'){
if(f.empty()) {printf("Ignored\n");continue;}
b.push(cur);
cur=f.top();
f.pop();
cout << cur <<"\n";
}
}
}
return 0;
}