操作集錦 牛客網 牛客練習賽60

2021-10-04 12:33:34 字數 2317 閱讀 6091

題目傳送

時間限制:c/c++ 1秒,其他語言2秒 空間限制:c/c++ 262144k,其他語言524288k 64bit io format:

%lld

題目描述

輸入描述:

第一行兩個整數n,k 第二行乙個長度為n的字串,保證只存在小寫字母.

輸出描述:

示例1輸入

3 1

abc

輸出

3
備註:

1≤n≤1e3

0≤k≤n

題意

給你乙個長度為n的字串,問有多有長度為k的子字串,且不重複。

題解:

這種求子字串數量題一般都用dp來做

dp[i][j]表示q前i個字串中,長度為j的子字串的數量

但是這個題是存在重複情況的,我們還要進行去重

這咋整?我們將dp從二維增加到三維,dp[i][j][k]新填乙個k,k表示以什麼字母結尾,(因為我們可以將a~z轉換成數字,a對應0,b對應1,一次類推),在dp新增時我們if判斷,如果當前結尾不是我們指定的字母,就不新增當前這位;如果是的話,就在前面的基礎在最後一位填上這個字母。

不明白?很正常(笑哭),我也快把自己講暈了

這個k就相當於是針對性的,dp[i][j][k]就是前i個字串中選j個以k為結尾的字元數量

舉例**:n=4 m=2

你會發現鏈結對於abab,長度為2且本質不同的結果有ab,aa,ba,bb,雖然abab的子字串中ab出現兩次,但是只統計了一次,因為在算以b(最後這個b)為結尾的時候,前面兩個a算作乙個a處理

**:

#include

using namespace std;

const int maxn=1004;

int dp[maxn]

[maxn]

[30]

;char a[maxn]

;const int mod=1e9+7;

long long sum=0;

int main(

) for(int i=1;i<=n;i++)

}else dp[i]

[j][w]

=(dp[i]

[j][w]+dp[i-1]

[j][w]

)%mod;}}

} for(int i=0;i<=25;i++)

sum=

(sum+dp[n]

[m][i]

)%mod;

cout<

}

**注意注意:**不要忘了mod

據說還能優化,等學會了再更新

上面這個解法複雜度是o(26n2)

我們這次把26給省掉變成o(n2)

設兩個陣列

g[i]:在前i個字元長度為j的本質不同的子串行個數

f[i][j]:前i個字元長度為j的本質不同的子串行個數

f[i][j]=f[i-1][j-1]+f[i-1][j]

f[i-1][j-1]就是不選擇s[i]

f[i-1][j]就是選擇s[i]

選擇的s[i]加上後有可能會重複,就需要我們先判斷當前的s[i]是否用過,然後把重複的部分去掉

f [ i ] [ j ] =f[ i ] [ j ]-f[ g [ s [ i ] ] - 1 ] [ j - 1 ]

還有在加的過程中注意不斷的mod

#include 

using namespace std;

#define ll long long

const int mod=1e9+7;

char s[100005]

;ll f[1005]

[1005], g[30]=;

int main(

) f[i]

[j]=

(f[i]

[j]+mod)%mod;

} g[s[i]

]=i;

} f[n]

[0]=1;

cout<

[k]%mod<

return 0;

}

牛客練習賽60 C 操作集錦

整理的演算法模板 acm演算法模板總結 分類詳細版 有一款自走棋有26種操作,每種操作我們都用a,b,c,d,x,y,za,b,c,d,x,y,za,b,c,d,x,y,z的符號來代替.比如對於abababababab,長度為222且本質不同的結果有ab,aa,ba,bbab,aa,ba,bbab,...

牛客練習賽60補題

思路 考慮位運算 的特性 只有兩者都為1才會對答案有貢獻 且 對答案貢獻的值為 1 k 其中k是當前1所在二進位制下的位數 所以考慮預處理每乙個位的1出現的次數 其中對每一位都會遍歷n n次 所以每一位對答案的貢獻就是 a i a i 1 i a i 為當前位置1的個數 include using ...

牛客網練習賽33

tokitsukaze最近沉迷一款rpg。這個rpg一天有k分鐘,每一天從第1分鐘開始。有n種怪物,第i種怪物每天第一次出現的時間為xi分鐘,第二次出現的時間為2 xi分鐘,第三次出現的時間為3 xi分鐘.同一時刻出現的怪物種類越多,打怪獲得的經驗也越高。為了高效練級,tokitsukaze想知道在...