zoj1259 Rails

开始不知道为什么用完stack后不执行清空操作也能AC 疑问,后来想想大概是因为前一组压进栈的元素留在栈底,而栈是后进先出,而当前组用例是重新对n个数中的一些数进行压栈操作,出栈也是针对当前用例组的数据,所以不会用到前一组残留在栈底的数据,但为了保险起见,最好还是要对栈清空操作,另外一个办法就是不在while循环外面定义栈s,而在while循环内部定义栈s,这样当一组用例执行结束,栈s就为空了。。。

#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      

using namespace std;

int a[1001]; //存放要实现的目标序列,即输入的n个数

int main(void)
{
	int i;    //i为目标序列下标
	int j, n; //j = 1,2,3...n,表示进站前顺序序列
	stack 
      
      
       
        s;
	while(scanf("%d", &n), n) //外零
	{
		while(scanf("%d", &a[1]), a[1]) //内零
		{
			for(i = 2; i <= n; i++)
			{
				scanf("%d", &a[i]);
			}
			i = j = 1;
			while(i <= n)
			{
				if(j == a[i]) //假如此时顺序序列j与目标序列a[i]值相等,
				{             //则直接跳过入栈、出栈(实际情况不会)进行下一个判断
					j++;
					i++;
				}
				else
				{
					if(!s.empty() && a[i] == s.top()) //假如此时顺序序列j与目标序列a[i]值不同并且栈不空,
					{                                 //那么要看a[i]是否与栈顶元素相同,相同则出栈,
						s.pop();                      //如果不同,那么只能在j后面找,但不能超出n,
						i++;                          //超出了n,则无法实现目标序列,直接跳出
					}
					else
					{
						if(j <= n)
							s.push(j++);
						else
							break;
					}
				}
			}
			if(i == n + 1) //while正常退出,可以实现目标序列
				printf("Yes\n");
			else
				printf("No\n");
			while(!s.empty())
				s.pop(); //不能实现目标序列时,栈内会有残存,要清零,为判断下一组目标序列做准备
		}
		printf("\n");
	}
	//system("pause");
}

      
      
     
     
    
    
   
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值