【题目描述】
网页浏览器者有后退与前进按钮,一种实现这两个功能的方式是用两个栈,“前进栈”、“后退栈”。
这里你需要实现以下几个功能:
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
QUITP
【样例输出】
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。
思路:模拟
代码实现:
1 #include<cstdio> 2 #include<cstring> 3 int ls,rs,lt,rt; 4 char now[600]="http://www.acm.org/"; 5 char left[110][600],right[110][600]; 6 char ch[600]; 7 int main(){ 8 freopen("kami.in","r",stdin); 9 freopen("kami.out","w",stdout); 10 while(scanf("%s",ch)){ 11 if(ch[0]=='Q') return 0; 12 if(ch[0]=='B'){ 13 if(!lt) puts("Ignored"); 14 else{ 15 for(int i=0;now[i]||right[rt][i];i++) right[rt][i]=now[i]; 16 rt++,lt--; 17 for(int i=0;now[i]||left[lt][i];i++) now[i]=left[lt][i]; 18 puts(now); 19 } 20 } 21 if(ch[0]=='F'){ 22 if(!rt) puts("Ignored"); 23 else{ 24 for(int i=0;now[i]||left[lt][i];i++) left[lt][i]=now[i]; 25 lt++,rt--; 26 for(int i=0;now[i]||right[rt][i];i++) now[i]=right[rt][i]; 27 puts(now); 28 } 29 } 30 if(ch[0]=='V'){ 31 scanf("%s",ch); 32 for(int i=0;now[i]||left[lt][i];i++) left[lt][i]=now[i]; 33 lt++,rt=0; 34 for(int i=0;now[i]||ch[i];i++) now[i]=ch[i]; 35 puts(now); 36 } 37 } 38 }
我开始明白名字的恶意了。
题目来源:zhx