有没有大佬救救只有20分的孩子qwq,给点数据也行啊
查看原帖
有没有大佬救救只有20分的孩子qwq,给点数据也行啊
866521
jijijibeibeibei楼主2023/7/21 08:59
#include<iostream>//p4387超时 
#include<stack>
#include<string.h>
using namespace std;

int n,q,num,num2,pan=0,pan1=1,lk=0;
int main(){
    cin>>q;
    for(int i=1;i<=q;i++){
        cin>>n;//序列长度
        int a[n+1],c[n+1]; 
        bool pan3[n+1];//用于判断这个数有没有进过栈 
        memset(pan3,0,sizeof(pan3));
        stack<int>b;
        for(int j=0;j<n;j++){
            cin>>a[j];//入栈顺序 
        }
        for(int j=0;j<n;j++){
            cin>>c[j];//出栈顺序 
        }
        for(int j=0;j<n;j++){
            if(pan3[j]==0)b.push(a[j]);pan3[j]=1;//没有用过,标记,压入栈顶 
            if(b.top()!=c[j]){//栈顶与出栈顺序不同 
                lk=j;
                while(pan1){
                    lk+=1;b.push(a[lk]);pan3[lk]=1;//让入栈的下一位入栈,并标记 
                    if(b.top()==c[j]){//若栈顶与出栈顺序中的相同 
                    	pan1=0;b.pop();break;//则出栈,并弹出 
					}
                    if(lk>n){pan=1;pan1=0;}//从头到尾都不合格 
                }pan1=1;
                if(pan==1)break;
            }else{
                b.pop();//相同则直接弹出,到下一个 
            }
        }memset(pan3,0,sizeof(pan3));
        if(pan==1){
            pan=0;
            cout<<"No"<<endl;
        }else{
            cout<<"Yes"<<endl; 
        }

    }
    return 0;
}
2023/7/21 08:59
加载中...