保つことができるスタックを考えると 、ほとんどの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 }