这是一道水题,没错,我就是加上来凑文章数量的
【题目描述】 网页浏览器者有后退与前进按钮,一种实现这两个功能的方式是用两个栈, “前进栈”、“后退栈”。 这里你需要实现以下几个功能: BACK: 如果“后退栈”为空则忽略此命令。否则将当前两面压入“前进栈”, 从“后退栈”中取出栈顶页面,并设置为当前页面。 FORWARD: 如果“前进栈”为空则忽略此命令。否则将当前两面压入“后 退栈”,从“前进栈”中取出栈顶页面,并设置为当前页面。 VISIT: 将当前页面压入“后退栈”、并将当前页面置为指定页面,并将“前 进栈”置空。 QUIT: 退出。 假设此浏览器初始页面为 http://www.acm.org/
【输入格式】 输入为一系列命令:BACK, FORWARD, VISIT 和 QUIT,页面网址为不含空 格的字符串 假设任一时刻任意时刻两个栈中的元素都不会超过 100。 最后一个命令为 QUIT。
【输出格式】 输对于除 QUIT 外所有命令,输出当前页面(网址) 如果该命令被忽略则输出“Ignored”。
【样例输入】 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
【样例输出】 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
【样例解释】 无。
【数据范围与规定】 对于100%的数据,操作数量不超过1000,每行字符串长度不超过500。
string模拟即可,char数组可能会麻烦一些。详见代码

1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 using namespace std; 5 template<class T> inline void read(T &_a){ 6 bool f=0;int _ch=getchar();_a=0; 7 while(_ch<'0' || _ch>'9'){if(_ch=='-')f=1;_ch=getchar();} 8 while(_ch>='0' && _ch<='9'){_a=(_a<<1)+(_a<<3)+_ch-'0';_ch=getchar();} 9 if(f)_a=-_a; 10 } 11 12 int h_p,h_n; 13 string s_p[1001],s_n[1001],now="http://www.acm.org/"; 14 char op[10]; 15 16 int main() 17 { 18 freopen("kami.in","r",stdin); 19 freopen("kami.out","w",stdout); 20 while(scanf("%s",op+1)==1) 21 { 22 if(op[1]=='Q') break; 23 else if(op[1]=='B') 24 { 25 if(!h_p) { printf("Ignored "); continue; } 26 s_n[++h_n]=now; 27 now=s_p[h_p--]; 28 } else if (op[1]=='F'){ 29 if(!h_n) { printf("Ignored "); continue; } 30 s_p[++h_p]=now; 31 now=s_n[h_n--]; 32 } else { 33 s_p[++h_p]=now; 34 cin>>now; 35 h_n=0; 36 } 37 cout<<now<<endl; 38 } 39 return 0; 40 }