尺取法求解HDU 5672

2021-08-11 07:56:18 字數 658 閱讀 1802

問題:給定字串string,求解至少有k種字元的子串數目有多少?

解法:前指標j,後指標i,遍歷指標i;

當子串的字元種類計數達到k時,可以得到包含該子串的所有子串數(len-i,包括它自身);

遞增指標j

若當前子串的字元種類計數仍為k,說明當前子串也是符合題意的,求出包含該子串的所有子串數(不包括j前面已有字元,否則會跟前面所求的子串重複)

否則停止遞增j,重新遍歷i知道子串字元種類的計數重新到達k時。

#include #include #include using namespace std;

const int maxn=1000000+5;

char str[maxn];

int cnt[26];

int main()

{ int t;

scanf("%d",&t);

while(t--)

{int k,cnt_k,len;

long long res;

scanf("%s%d",str,&k);

memset(cnt,0,sizeof(cnt));

len=strlen(str);

res=0;

cnt_k=0;

int j=0;

for(int i=0;i

演算法 尺取法

我們先來介紹一下尺取法。尺取法,顧名思義,像尺子一樣,一塊一塊的擷取。題目翻譯 給定長度為n的數列整數a0,a1,a2,a3 an 1以及整數s。求出綜合不小於s的連續子串行的長度的最小值。如果解不存在,則輸出0。限制條件 100s 10 8 這裡我們拿第一組測試資料舉例子,即 n 10,s 15,...

尺取法練習

mr wolfram 的csdn 部落格 hopeforbetter的csdn部落格,尺取法顧名思義就像尺子一樣,當測量乙個物體時,你不一定從開始的位置測量,你可以從任意乙個位置st開始,當然前提是尺子夠長,然後你再讀出尾部en的數,尾部減去開始的位置en st,就是這個物體的長度。尺取法就是這個思...

尺取法基礎

p1638 逛畫展 題意 求最短區間包含所有畫家。思路 利用兩個變數來維護區間,如果區間不滿足條件r 滿足的話,l 直到區間最小。includeusing namespace std int a 1000005 b 1000005 int main b a l if b a l 0 k l else...