ZOJ Problem Set - 1061
来源:互联网 发布:sql left join where 编辑:程序博客网 时间:2024/05/16 09:03
【模拟题】
【题目】
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 <url>: 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/
This problem contains multiple test cases!
The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.
The output format consists of N output blocks. There is a blank line between output blocks.
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
1
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
Source: East Central North America 2001
【题意说明】
在浏览器中基本的网页访问一般都支持三种访问方式:在地址栏里输入URL、后退、前进。现在本题模拟一个简单的浏览器,程序输入包括多组用例,每组用例中输入三种访问网页的操作:(1)直接访问URL(VISIT URL)(2)针对当前网页进行后退(BACK)(3)针对当前网页进行前进(FORWARD),对应每组用例的每个输入,输出当前正在访问的网页URL,如果操作失误导致网页不可达(比如输入URL访问后操作前进访问或者当后退到第一次访问的网页后仍在操作后退访问)则输出"Ignored",每组用例以“QUIT”结束。
【解答】
(一)分析:当输入URL访问或者前进访问时,可把上一次刚访问过的网页URL压入一个后退栈中,则后退栈的栈顶保存的是相对于当前网页之前最近访问过的网页,这样当进行后退操作时便可弹出栈顶网页作为后退操作正在访问的网页;同理,当后退访问时,可把上一次刚访问过的网页URL压入一个前进栈中,则前进栈顶保存的是离后退访问的网页之后的最近网页,这样当进行前进操作时便可弹出栈顶网页作为前进操作正在访问的网页;另外,不难得出,当进行后退或前进操作时,如果后退栈或前进栈为空,则网页不可达。
(二)代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<stack>using namespace std;int main(){int n,num;stack<string> back,forward;string url,current;//current记录当前正在访问的网页(由VISIT/BACK/FORWARD触发)char action[10];scanf("%d",&n);//n个用例for(num=1;num<=n;num++){current="http://www.acm.org/";//每个用例前清空后退栈、前进栈while(!back.empty())back.pop();while(!forward.empty())forward.pop();//输入网页访问动作while(scanf("%s",action)&&strcmp(action,"QUIT")!=0){//URL访问方式if(strcmp(action,"VISIT")==0){cin>>url;back.push(current);//将上次访问的网页压入后退栈备用current=url;cout<<current<<endl;//输出当前正在访问的网页//当输入URL访问过一个网页后,则前进动作无网页,故清空前进栈while(!forward.empty())forward.pop();}//后退方式else if(strcmp(action,"BACK")==0){if(!back.empty()){forward.push(current);//将之前刚访问的网页压入前进栈备用url=back.top();current=url;//当前访问的网页为后退栈顶back.pop();//取栈顶后删除原栈顶cout<<current<<endl;//输出当前正在访问的网页}elseprintf("Ignored\n");}//前进方式else if(strcmp(action,"FORWARD")==0){if(!forward.empty()){back.push(current);//将之前刚访问的网页压入后退栈备用url=forward.top();current=url;//当前访问的网页为前进栈顶forward.pop();//取栈顶后删除原栈顶cout<<current<<endl;//输出当前正在访问的网页}elseprintf("Ignored\n");}}if(num<n)printf("\n");}return 0;}//Accepted
(解于2009/10)
- ZOJ Problem Set - 1061
- ZOJ Problem Set - 1061
- ZOJ Problem Set - 2060
- ZOJ Problem Set - 2972
- ZOJ Problem Set - 1037
- ZOJ Problem Set - 1048
- ZOJ Problem Set - 1049
- ZOJ Problem Set - 1051
- ZOJ Problem Set - 1067
- ZOJ Problem Set - 1115
- ZOJ Problem Set - 1151
- ZOJ Problem Set - 1205
- ZOJ Problem Set - 1025
- ZOJ Problem Set - 1029
- ZOJ Problem Set - 1076
- ZOJ Problem Set - 1117
- ZOJ Problem Set - 1041
- ZOJ Problem Set - 1004
- Windows和Linux下的Sleep()函数小结
- 黑马程序员————高新技术————类加载器
- POJ-3345 Bribing FIPA(Tree dp + 背包)
- who命令的编写——登录与注销__who, whoami, who am i
- hdu 3486 Interviewe 二分+RMQ
- ZOJ Problem Set - 1061
- 链表操作(从尾到头打印链表,使用栈结构实现)
- Android 可执行文件
- Demo-简单使用libcurl静态库访问网址
- 堆排序中--建堆的算法复杂度分析O(n)
- [安卓破解]听网页浏览器,无需注册即可语音朗读
- 第一个mapreduce
- 线性同余和扩展欧几里得的运用小结
- SPOJ8222(后缀自动机--出现次数最多的子串)