题目:​​http://poj.org/problem?id=1028​


Web Navigation


Time Limit: 1000MS

 

Memory Limit: 10000K

Total Submissions: 31299

 

Accepted: 14032


Description


Standard web browsers contain features to move backward and forward among the pages recently visited. One way to implement these features is to use two stacks to keep track of the pages that can be reached by moving backward and forward. In this problem, you are asked to implement this.
The following commands need to be supported:
BACK: Push the current page on the top of the forward stack. Pop the page from the top of the backward stack, making it the new current page. If the backward stack is empty, the command is ignored.
FORWARD: Push the current page on the top of the backward stack. Pop the page from the top of the forward stack, making it the new current page. If the forward stack is empty, the command is ignored.
VISIT : Push the current page on the top of the backward stack, and make the URL specified the new current page. The forward stack is emptied.
QUIT: Quit the browser.
Assume that the browser initially loads the web page at the URL http://www.acm.org/


Input


Input is a sequence of commands. The command keywords BACK, FORWARD, VISIT, and QUIT are all in uppercase. URLs have no whitespace and have at most 70 characters. You may assume that no problem instance requires more than 100 elements in each stack at any time. The end of input is indicated by the QUIT command.


Output


For each command other than QUIT, print the URL of the current page after the command is executed if the command is not ignored. Otherwise, print "Ignored". The output for each command should be printed on its own line. No output is produced for the QUIT command.


Sample Input


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 QUIT


Sample Output


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

分析:本题是模拟浏览器的网页变化,主要依靠两个栈back stack and forward stack。visit页面输出后年即立即压入back栈,两个栈的页面任意一个弹出并输出后立即压入另一个栈,这样把所有有效的页面统统放入栈里,而那些无效的页面比如"ignore",空页面(空的字符串)等统统不压,这样就能让所有的操作得到正确的回应。最开始自己用指针数组来存字符串模拟栈,千奇百怪的错误。。。还是STL好用。。


#include <iostream>
#include <cstdio> //有时使用string,stack等容器真的挺方便的
#include <stack>
#include <string>
using namespace std;
stack<string> bsta,fsta;
string str,com;
int main()
{
//freopen("cin.txt","r",stdin);
string temp="http://www.acm.org/";
bsta.push(temp);
while(cin>>com&&com!="QUIT"){
if(com=="VISIT"){
cin>>str;
bsta.push(str);
while(!fsta.empty()) fsta.pop();
}
else if(com=="BACK"){
if(bsta.size()<=1) str="Ignored";
else {
fsta.push(bsta.top());
bsta.pop();
str=bsta.top();
}
}
else if(com=="FORWARD"){
if(fsta.size()==0) str="Ignored";
else {
str=fsta.top();
bsta.push(fsta.top());
fsta.pop();
}
}
cout<<str<<endl;
}
return 0;
}