麻烦大佬帮忙看看,这个做法有什么问题,只有20分
查看原帖
麻烦大佬帮忙看看,这个做法有什么问题,只有20分
87768
zjsy楼主2020/9/1 10:16
#include<bits/stdc++.h>
using namespace std;
int main()
{
	//freopen("ans.out","w",stdout);
	int q,n,a[100010],b[100010],pushed[100010],poped[100010],temp,p,qmax=0;
	bool t=0;
	cin>>q;
	for(int i=1;i<=q;i++)
	{
		cin>>n;
		for(int j=1;j<=n;j++)
		{
			cin>>pushed[j];//读取入栈顺序,a记录元素pushed[j]在顺序中的位置 
			a[pushed[j]]=j;
		}
		for(int j=1;j<=n;j++)
		{
			cin>>poped[j];//读取出栈顺序,b记录元素poped[j]在顺序中的位置 
			b[poped[j]]=j;
		}
		for(int j=1;j<n;j++)//对于第j个出栈的元素,在它之前入栈并在它之后出栈的元素一定按入栈顺序逆向出栈 
		{
			p=a[poped[j]],t=1;
			for(int k=p-1;k>=1;k--)//检索在该元素之前出栈的元素 
			{
				if(b[a[k]]>j)//判断是否在其之后出栈 
					if(b[a[k]]>qmax) qmax=b[a[k]];//判断在该元素之后出栈,是否是逆序出栈 
					else {t=0;break;}
			}
			qmax=0;
			if(!t) break; 
		}
		if(t) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;	
	}
	return 0;
}
2020/9/1 10:16
加载中...