本题可以理解为先对列车排序,然后根据所给排序判断是否可以得到。
得到方式为a-b或a-c-b或者同时有如1 2 3 5 4便可以达成
先将123放到b上,将4移到c,将5移到b, 最后将4从c移到b。
#include"iostream"
#include"algorithm"
#include"vector"
#include"stack"
using namespace std;
int main()
{
int a,i,g;
while(~scanf("%d",&g)&&g!=0)
{
while(~scanf("%d",&a))
{if(a==0){printf("\n");break;}
stack <int> s;
int m=0;
vector <int> v;
v.push_back(a);
for(i=0;i<g-1;i++)
{scanf("%d",&a);v.push_back(a);}a=1;
for(i=0;i<=g-1;)
{
if(a==v[i]){a++;i++;}
else if(!s.empty()&&s.top()==v[i])
{s.pop();i++;}
else if(a<=g){s.push(a++);}
else {m=1;break;}
}
if(m==0) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}