[タイトル説明:
スターは、週刊誌が発行される注文する予定ですが、彼は読書が、カードのセットのためではありません。
雑誌を発行するN週知られている(すなわち、N段階)、各問題には、カードが付属しています。さまざまな方法を通じてスター、N雑誌が来るカードのタイプを理解しています。スターは、ちょうどいくつかの連続した期間を命じ、期間中のカードのすべての可能なタイプを集めました。今、彼はあなたが最小期間を注文する必要がどのくらい、知りたいです。
[入力説明:
整数Nの最初の行。
i番目のカードのi番目の文字のタイプを示す長さN、大文字または小文字の文字列の2行目は、カードを示す各文字(大文字と小文字を区別)が来ます。
[出力]説明:
出力ライン期間スター最小注文の数を表す整数。
[サンプル入力]:
8
acbbbcca
[]出力例:
3
[サンプル]説明:
[時間制限、およびデータの説明の範囲:
時間:1秒容量:256M
データの30%、N≤300。
データの40%、N≤2000。
データの60%、N≤5000。
データの80%、N≤100000。
データの100%、N≤500000します。
書式#include <アルゴリズム> 書式#include <iostreamの> の#include <CStringの> の#include <cstdioを> する#include <cmath> の#include <キュー> std名前空間を使用しました。 [500610]をINT、N。 チャーX。 int型P [200]、Q [200]、NUM、今、ANS = 2147483647。 INTメイン(){ scanf関数( "%d個の%のC"、&N、&x)は、 以下のために{(INT i = 1; iが++; iが<= N) のscanf( "%のC"、およびX)を、 [I] = xと; (!P [I] = 1){もし P [I]] ++; Q [++ NUM] = [I]。 } } int型K = NUM。 以下のために{(INT i = 1; iが++; iが<= n)は 今= 0。 用(INT J = 1; J <= K; J ++){ P [Q [J] = 0; } (INT J = 1; J <= I。 もし(P [J]] == 1){ 今++。 } } もし(現在== K){ のprintf( "%dの"、I)。 0を返します。 } のための(int型J = I + 1、J <= nであり、j ++){ P [JI] - 。 もし(P [JI]] == 0){ now--。 } P [J] ++; もし(P [J]] == 1){ 今++。 } もし(現在== K){ のprintf( "%dの"、I)。 0を返します。 } } } 0を返します。 }