C CSL 的密碼 字串 思維

2021-09-16 12:27:19 字數 1481 閱讀 8587

眾所周知,csl 最喜歡的密碼是 ******。於是有一天……

為了改變這一點,他決定重新設定乙個密碼。於是他隨機生成了乙個很長很長的字串,並打算選擇乙個子串作為新密碼。他認為安全的密碼長度至少為 m,那麼他有多少種不同選擇方式呢?兩種方案不同,當且僅當選出的密碼內容不同。

輸入描述:

第一行有兩個整數 n 和 m ,分別表示 csl 隨機生成的字串長度和安全的密碼的最短長度。

第二行有乙個長度為 n 的只含小寫字母的字串 s 表示 csl 隨機生成的字串。

1≤m≤n≤105

1≤m≤n≤105

輸出描述:

在一行輸出乙個整數,表示 csl 能選擇的方案數。

示例1輸入

複製9 1

abcabcabc

輸出複製

24備註:

除樣例外,所有的測試資料的字串的每個字元均從小寫字母 a - z 等概率隨機生成。

思路:這道題其實沒那麼想象中複雜… 這個備註很關鍵,等隨機概率生成,意味著字串長度越長重複概率越小,需要的就是將長度小於l的字串放進set中檢驗出有多少個不同的,這個l定為13也能過,大於13的字串意味每個都不相同,直接加上對應長度字串的數量即可

#include

#define fi first

#define se second

#define log2(a) log(n)/log(2)

#define show(a) cout<#define show2(a,b) cout<#define show3(a,b,c) couttypedef

long

long ll;

typedef pair<

int,

int> p;

typedef pairint> lp;

const ll inf =

1e17+10

;const

int n =

1e5+10;

const ll mod =

998244353

;const

int base=

131;

const

double pi=

acos(-

1);vector<

int> pri,en;

int n,m,k,num[n]

,x,vis[n]

,y;ll ans=

0,l,r;

map<

int,

int> mp;

string s,ss;

p a[n]

,b[n]

;set se;

intmain()

ans+

=se.

size()

;}for(

int i=

max(

14,m)

;i<=n;i++

) cout<}

解碼字串

表示式s,只包含數字字母以及方括號,該表示式有如下規則 數字只會出現在方括號之前,它表示方括號裡內容的重複次數 按上述規則展開字串 示例1 e3 2 abc gh eabcabcghabcabcghabcabcgh 示例2e9 xyz exyzxyzxyzxyzxyzxyzxyzxyzxyz 示例3...

openjudge 編碼字串

總時間限制 1000ms 記憶體限制 65536kb 描述在資料壓縮中,乙個常用的方法是行程長度編碼壓縮。對於乙個待壓縮的字串,我們可以依次記錄每個字元及重複的次數。例如,待壓縮的字串為 aaabbbbcbb 壓縮結果為 a,3 b,4 c,1 b,2 這種壓縮對於相鄰資料重複較多的情況有效,如果重...

ISBN號碼(字串)

isbn號碼 每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括9位數字 1位識別碼和3位分隔符,其規定格式如 x xx x 其中符號 就是分隔符 鍵盤上的減號 最後一位是識別碼,例如0 670 82162 4就是乙個標準的isbn碼。isbn碼的首位數字表示書籍的出版語言,例如0代表...