铁轨问题 用栈解决

#include<cstdio>
#include<stack>
using namespace std;
const int MAXN=1000+10;
int n,target[MAXN];
int main()
{
   while(scanf("%d",&n)==1)
   {
	   stack<int> s;
	   int A=1,B=1;
	   for(int i=1;i<=n;i++)
		   scanf("%d",&target[i]);
       int ok=1;
	   while(B<=n)
	   {
		   if(A==target[B])
		   {A++;
		   B++;
		  }
		   else if(!s.empty()&&s.top()==target[B])
		   {s.pop();
		   B++;
		   }
		   else if(A<=n) 
		   {s.push(A);
		   A++;
		   }
		   else{ok=0;break;}
	   }
	   printf("%s\n",ok?"yes":"no");
   }
   return 0;
}

  

posted on 2014-03-20 20:48  一颗向上的草莓  阅读(218)  评论(0编辑  收藏  举报