1051ポップシーケンス(25点)

保つことができるスタックを考えると  、ほとんどのM番号を。プッシュ  1、2、3、...、の順にN個の番号を  Nとランダムポップ。あなたは数字の与えられたシーケンスは、スタックの可能なポップ・シーケンスである場合伝えることになっています。たとえば場合、  Mは5であり、  Nは7であり、我々は、スタックから1、2、3、4、5、6、7を得ることができるではなく、3、2、1、7、5、6、4。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、3つの数字(すべてのこれ以上千以上)を含む  M(スタックの最大容量)、  N(プッシュ配列の長さ)、及び  K(チェックするポップシーケンスの数)。次いで、  Kラインは、それぞれのポップシーケンス含まれ、追従  N番号。行のすべての数字は、スペースで区切られます。

出力仕様:

各ポップシーケンスのために、それは確かに、スタックの可能ポップシーケンスである場合は、1つの行「YES」で印刷、または「NO」の場合ではありません。

サンプル入力:

5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2

サンプル出力:

YES
NO
NO
YES
NO
トピック分析:アナログは、長い時間のために書きました
1  の#define _CRT_SECURE_NO_WARNINGS
 2の#include <climits>
 3の#include <iostreamの>
 4の#include <ベクトル>
 5の#include <キュー>
 6の#include <地図>
 7の#include < セット >
 8の#include <積層>
 9の#include <アルゴリズム>
 10の#include < ストリング >
 11の#include <cmath>
 12  使用 名前空間STDを、
13スタック< INT > S1。
 
       整数M、N、K。
18      CIN >> M >> N >> K。
19      ベクター< INT >アレイ(N + 1 )。
20      ベクター< INT >試験(N + 1 )。
21      のためにINTは iは= 1 ; I <= N; I ++ 22          配列[I] = I。
23      のためにINT iは= 0 ; I <K I ++ 24      {
 25          ながら(S1.size())
 26              S1.pop()。
27          のためのint型J = 1 ; J <= N; J ++ 28              CIN >> 試験[J]。
29          のint、K = 1、T = 1、フラグ= 1 30          一方、(T <= N)
 31          {
 32              であれば(S1.size()> M)
 33              {
 34                  フラグ= 0 35                  ブレーク;
36              }
 37              そう であれば(S1.size())
 38              {
 39                  であれば(S1.top()==試験[T])
 40                  {
 41                      S1.pop()。
42                      トン++ ;
43                  }
 44                  そう であれば(K <= N)
 45                  {
 46                      S1.push(配列[K])。
47                      のk ++ ;
48                  }
 49                  他の
50                  {
 51                      であれば(S1.top()== 試験[T])
 52                      {
 53                          S1.pop()。
54                         トン++ ;
55                      }
 56                      他の
57                      {
 58                          フラグ= 0 59                          ブレーク;
60                      }
 61                  }
 62              }
 63              {
 64                  S1.push(配列[K])。
65                  のk ++ ;
66              }
 67          }
 68          であれば(フラグ)
 69              COUT << " YES" << ENDL;
 70          
71              COUT << " NO " << ENDL;
 72      }
 73 }
コードの表示

おすすめ

転載: www.cnblogs.com/57one/p/12045181.html