保つことができるスタックを考えると 、ほとんどの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つの数字(全く1000以上)を含む 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
書式#include <iostreamの> の#include <スタック> 使用して 名前空間はstdを、 INT メイン(){ // 最大容量、一行最大数、N行 INT MAXCAPACITY、MAXNUM、ライン、 CIN >> MAXCAPACITY >> MAXNUM >> ライン。 一方、(line-- ){ スタック < INT > STA。 int型のval [MAXNUM]。int型の A = 0 ; 以下のために(int型 i = 0 ; iは<MAXNUM; iは++ ){ CIN >> ヴァル[I]。 } BOOL = NO偽; 以下のために(int型 i = 0 ; iは<MAXNUM iは++ ){ sta.push(iは + 1 )。 もし(sta.size()> MAXCAPACITY){ なし = 真。 破ります; } ながら(!sta.empty()&&ヴァル[A] == sta.top()){ sta.pop()。++ ; } } であれば(NO)COUT << " NO " << ENDL。 それ以外の 場合(sta.empty())COUT << " YES " << ENDL。 他の裁判所未満<< " NO " << てendl; } システム(「一時停止」)。 リターン 0 ; }