曾有你的森林 尺取法板子題

2021-09-05 12:13:43 字數 876 閱讀 5996

emiya面前的n朵花按直線排列,一共m種花朵,花的種類用1,2,3…m-1,m的數字進行編號..

emiya想知道的是,最少連續多少朵花,可以包含前1~k種類花朵每種至少一次.

第一行包含乙個整數t,表示測試的組數, 1≤t≤10

接下來是t組資料:

每組的第一行包含3個整數n,m,k 其中1 <= n,m <= 10^5,1 <= k <= m

接下來一行包含n個整數,表示按直線排列的n朵花.

每一組資料輸出一行,

包含乙個整數包含,即為所求的答案.,如果不存在答案 則輸出-1

輸入

35 5 3 

1 2 3 4 5

5 5 3 

1 2 1 2 1

5 4 3 

1 2 4 3 1輸出3

-14尺取法板子題,不解釋了。和 poj - 3320  這道題方法一樣

poj - 3320 鏈結 

#include#include #include#include#include using namespace std;

const int maxn=1e5+10;

int a[maxn];

int main()

int ans=1000000;

int r=0,l=0,cnt=0;

while(true)

if(cntans=min(ans,r-l);

mm[a[l]]--;

if(mm[a[l]]==0&&a[l]<=k) cnt--;

l++;

}if(ans==1000000)else

}return 0;

}

常用的解題技巧 尺取法

尺取法 顧名思義,像尺子一樣取一段,借用挑戰書上面的話說,尺取法通常是對陣列儲存一對下標,即所選取的區間的左右端點,然後根據實際情況不斷地推進區間左右端點以得出答案。之所以需要掌握這個技巧,是因為尺取法比直接暴力列舉區間效率高很多,尤其是資料量大的時候,所以尺取法是一種高效的列舉區間的方法,一般用於...

關於尺取法的一些例子

最近做了一些關於尺取法的題,大概明白了一些套路。首先固定左端點,不斷地去取右端點,直到區間盡頭或者不滿足條件,然後判斷是否滿足條件,如果不滿足條件一般情況下是到了盡頭,然後去最值,然後刪去乙個左端點再在新的乙個左端點上不斷地去取右端點,這樣整個演算法的複雜度為o n poj 3061 尺取法版本 i...

尺取法 最短的包含字串

給出乙個字串,求該字串的乙個子串s,s包含a z中的全部字母,並且s是所有符合條件的子串中最短的,輸出s的長度。如果給出的字串中並不包括a z中的全部字母,則輸出no solution。input 第1行1個字串。字串的長度 100000。output 輸出包含a z的最短子串長度。如果沒有符合條件...