保つことができるスタックを考えると 、ほとんどの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
【解決】
Pythonで書かれたタイトル:
2点のみをポップアップ表示する順序を満たすために:
- デジタルPのIの後者の配列は、Pの除去率Iの少数後の配列が逆でなければなりません。(原則鉄道のスケジューリング問題を参照してください)
- 最大スタック容量は、すべてのシーケンス番号の前にM、NM-1であるため、M + 1、M + 2、Mよりも大きくないです...、M +(NM-1)
インポートのNPとしてnumpyの DEFの溶液(M、N、L) のための I における範囲(N- M): もし L [I]> M + I: リターン(" NO " ) 用の I における範囲(N-3、-1 、-1 ): tmp_L = np.array(L [I + 1 :)] IDX = tmp_L < )np.repeat(L [i]は、LEN(tmp_L) tmp_L = リスト(tmp_L [IDX]) 場合 ではないソート( tmp_L、逆= TRUE)== tmp_L: リターン(" NO ") リターン(" YES " ) 場合 __name__ == ' __main__ ' : M、N、K =タプル(マップ(INT、raw_input()スプリット(" " ))) のための I における範囲(K): L =マップ( INT、raw_input()。スプリット(" " )) プリント(溶液(M、N、L))