Lightoj1113——Discover the Web(STL,栈的使用)
2016-04-18 13:59
447 查看
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. You are asked to
implement this. The commands are:
1. BACK: If the backward stack is empty, the command is ignored. Otherwise, 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.
2. FORWARD: If the forward stack is empty, the command is ignored. Otherwise, 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.
3. 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.
4. QUIT: Quit the browser.
The browser initially loads the web page at the URL 'http://www.lightoj.com/'
Each case contains some commands. The keywords BACK, FORWARD, VISIT, and QUIT are all in uppercase. URLs have no whitespace and have at most 50 characters. The end of case is indicated by the QUIT command and it shouldn't be processed. Each case contains
at most 100 lines.
这简直是STL中stack的完美运用,以后都不用麻烦自己去定义一个栈了
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<cmath>
#include<stack>
#define MAXN 1000010
using namespace std;
stack<string> backward;
stack<string> Forward;
int main()
{
string op,url;
int t,cnt=1;
scanf("%d",&t);
while(t--)
{
backward.push("http://www.lightoj.com/");
printf("Case %d:\n",cnt++);
while(1)
{
cin>>op;
if(op[0]=='B')
{
if(!backward.empty())
{
Forward.push(backward.top());
backward.pop();
if(backward.empty())
{
backward.push(Forward.top());
Forward.pop();
cout<<"Ignored"<<endl;
}
else
cout<<backward.top()<<endl;
}
}
if(op[0]=='F')
{
if(!Forward.empty())
{
backward.push(Forward.top());
Forward.pop();
cout<<backward.top()<<endl;
}
else
cout<<"Ignored"<<endl;
}
if(op[0]=='V')
{
cin>>url;
backward.push(url);
while(!Forward.empty())
Forward.pop();
cout<<url<<endl;
}
if(op[0]=='Q')
break;
}
while(!Forward.empty())
Forward.pop();
while(!backward.empty())
backward.pop();
}
return 0;
}
implement this. The commands are:
1. BACK: If the backward stack is empty, the command is ignored. Otherwise, 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.
2. FORWARD: If the forward stack is empty, the command is ignored. Otherwise, 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.
3. 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.
4. QUIT: Quit the browser.
The browser initially loads the web page at the URL 'http://www.lightoj.com/'
Input
Input starts with an integer T (≤ 100), denoting the number of test cases.Each case contains some commands. The keywords BACK, FORWARD, VISIT, and QUIT are all in uppercase. URLs have no whitespace and have at most 50 characters. The end of case is indicated by the QUIT command and it shouldn't be processed. Each case contains
at most 100 lines.
Output
For each case, print the case number first. For each command, print the URL of the current page (in a line) after the command is executed if the command is not ignored. Otherwise, print 'Ignored'.Sample Input | Output for Sample Input |
1 VISIT http://uva.onlinejudge.org/ VISIT http://topcoder.com/ BACK BACK BACK FORWARD VISIT http://acm.sgu.ru/ BACK BACK FORWARD FORWARD FORWARD QUIT | Case 1: http://uva.onlinejudge.org/ http://topcoder.com/ http://uva.onlinejudge.org/ http://www.lightoj.com/ Ignored http://uva.onlinejudge.org/ http://acm.sgu.ru/ http://uva.onlinejudge.org/ http://www.lightoj.com/ http://uva.onlinejudge.org/ http://acm.sgu.ru/ Ignored |
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<cmath>
#include<stack>
#define MAXN 1000010
using namespace std;
stack<string> backward;
stack<string> Forward;
int main()
{
string op,url;
int t,cnt=1;
scanf("%d",&t);
while(t--)
{
backward.push("http://www.lightoj.com/");
printf("Case %d:\n",cnt++);
while(1)
{
cin>>op;
if(op[0]=='B')
{
if(!backward.empty())
{
Forward.push(backward.top());
backward.pop();
if(backward.empty())
{
backward.push(Forward.top());
Forward.pop();
cout<<"Ignored"<<endl;
}
else
cout<<backward.top()<<endl;
}
}
if(op[0]=='F')
{
if(!Forward.empty())
{
backward.push(Forward.top());
Forward.pop();
cout<<backward.top()<<endl;
}
else
cout<<"Ignored"<<endl;
}
if(op[0]=='V')
{
cin>>url;
backward.push(url);
while(!Forward.empty())
Forward.pop();
cout<<url<<endl;
}
if(op[0]=='Q')
break;
}
while(!Forward.empty())
Forward.pop();
while(!backward.empty())
backward.pop();
}
return 0;
}
相关文章推荐
- 关于用.9.png格式处理图标失真问题
- nfs搭建
- React-native 中的触摸响应功能
- String在JAVA里是固定长度的吗?为什么可用“+”连接
- 安装nginx第三方模块
- 通过select较高效的捕获和处理鼠标键盘事件
- CATiledLayer
- 进程间通信之命名管道
- Android源码及SDK国内镜像下载
- cas系列(三)--HTTP和HTTPS、SSL
- fragment 与 activity
- convert
- c# 字符串拼接效率
- 使用Java 导入Zip文件遇到中文命名乱码问题
- 跟王老师学接口二: 接口的使用与接口与抽象类的区别
- AndroidUI--SlidingMenu使用例子
- 关于LoadRunner压测过程中出现的error26601的解释
- Median of Two Sorted Arrays
- git 的常用命令
- 如何通俗的解释计算机是如何实现1+1=2计算的?