网站建设制作的规划方案施工企业公司管理制度
题目描述
给出两个序列 pushed 和 poped 两个序列,其取值从 1 到 n(n≤100000)。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出 Yes,否则输出 No。为了防止骗分,每个测试点有多组数据,不超过 5 组。
输入格式
第一行一个整数 q,询问次数。
接下来 q 个询问,对于每个询问:
第一行一个整数 n 表示序列长度;
第二行 n 个整数表示入栈序列;
第三行 n 个整数表示出栈序列;
输出格式
对于每个询问输出答案。
输入输出样例
输入 #1复制
2 5 1 2 3 4 5 5 4 3 2 1 4 1 2 3 4 2 4 1 3
输出 #1复制
Yes No
代码实现:
#include <iostream>
 #include <stack>
 #include <vector>
 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
 using namespace std;
 int main(int argc, char** argv)
  {
      int m,n,i,j,c[100001];
      cin>>m;
      stack<int> sta;
      for(j=0;j<m;j++)
     {
          cin>>n;
          int a[n],b[n];
          for(i=0;i<n;i++)
          {
              cin>>a[i];
         }
         for(i=0;i<n;i++)
          {
              cin>>b[i];
         }
         int head=0;
         for(i=0;i<n;i++)
         {
             sta.push(a[i]);
             while(sta.top()==b[head])
             {
                 sta.pop();
                 head++;
                 if(sta.empty())
                 {
                     break;
                 }
             }
         }
         if(sta.empty())
         {
             c[j]=1;
         }
         else
         {
             c[j]=0;
         }
         while (!sta.empty()) {
             sta.pop();
         }
     } 
     for(i=0;i<m;i++)
     {
         if(c[i]==0)
         {
             cout<<"No"<<endl;
         }
         else
         {
             cout<<"Yes"<<endl;
         }
     }
     return 0;
 }
