7-3ポップシーケンス(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つの数字(全く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))

 

おすすめ

転載: www.cnblogs.com/pandas-blue/p/11666732.html