藍橋杯 演算法訓練 統計單詞個數

2021-08-19 15:49:11 字數 1207 閱讀 7321

問題描述

給出乙個長度不超過200的由小寫英文本母組成的字母串(約定;該字串以每行20個字母的方式輸入,且保證每行一定為20個)。要求將此字母串分成k份 (1輸入格式

第一行有二個正整數(p,k)

p表示字串的行數;

k表示分為k個部分。

接下來的p行,每行均有20個字元。

再接下來有乙個正整數s,表示字典中單詞個數。(1<=s<=6)

接下來的s行,每行均有乙個單詞。

輸出格式

每行乙個整數,分別對應每組測試資料的相應結果。

樣例輸入

1 3thisisabookyouareaoh 4

is a

oksab

樣例輸出 7

資料規模和約定

長度不超過200,1

乙個中等難度的模擬題,由於題幹要求第乙個字母不可以再次利用,我們只需要遍歷這個字串,看哪乙個位置可以作為單詞的起點,再統計單詞的個數即可。

有個稍微難點的地方在於要把這個字串分成k份,使分開後的單詞個數最多,其實理解了以後也不難處理。很顯然,最優處理方式一定是在不含單詞的位置劃分,這樣的話單詞個數就是上面統計出來的個數。可是,不含單詞的位置可能比k要少,此時的劃分就會不可避免的破壞單詞,很顯然,最優情況就是破壞乙個單詞(將邊緣乙個字母劃分出去就行)。

我們遍歷字串每個單詞是否匹配時,順便把單詞截止的字串位置記錄下來,用maxi和maxj變數表示出最靠後的截至位置,只有字串遍歷位置大於這個截止位置且遍歷位置不作為單詞首字母時,該位置就是不被單詞包含的位置,在此處劃分對單詞個數無影響。

這樣難點就都解決了,**如下:

#include

#include

#include

#include

#include

using namespace std;

char ch[10][20];

char ci[6][20];

int cnt=0;

bool pipei(int i,int j,int u,int &ii,int &jj)

if(ch[i][j+k]!=ci[u][k])

return false;

}ii=i;

jj=j+len-1;

return true;

}int main()

printf("%d\n",cnt-k+1);

return 0;

}

藍橋杯 不同單詞個數統計

t 藍橋杯 演算法提高vip 不同單詞個數統計 題解 c 描述 oc 題目描述 編寫乙個程式,輸入乙個句子,然後統計出這個句子當中不同的單詞個數。例如 對於句子 one little two little three little boys 總共有5個不同的單詞 one,little,two,thr...

藍橋杯 不同單詞個數統計

t 藍橋杯 演算法提高vip 不同單詞個數統計 題解 c 描述 oc 題目描述 編寫乙個程式,輸入乙個句子,然後統計出這個句子當中不同的單詞個數。例如 對於句子 one little two little three little boys 總共有5個不同的單詞 one,little,two,thr...

藍橋杯 演算法訓練 單詞接龍

ac 邏輯縝密,思路清晰 暴力搜尋解決問題 ac 如下 include 萬能的標頭檔案 using namespace std int n string s 21 head vectorvec 21 vec i 陣列存放著所有與i匹配的字串編號 int length 21 21 length i j...