D 子串查詢

2021-08-22 16:30:08 字數 1485 閱讀 4906

**:

度度熊的字串課堂開始了!要以像度度熊一樣的天才為目標,努力奮鬥哦! 

為了檢驗你是否具備不聽課的資質,度度熊準備了乙個只包含大寫英文本母的字串 a[1,n]=a1a2⋯ana[1,n]=a1a2⋯an,接下來他會向你提出 qq 個問題 (l,r)(l,r),你需要回答字串 a[l,r]=alal+1⋯ara[l,r]=alal+1⋯ar 內有多少個非空子串是 a[l,r]a[l,r] 的所有非空子串中字典序最小的。這裡的非空子串是字串中由至少乙個位置連續的字元組成的子串行,兩個子串是不同的當且僅當這兩個子串內容不完全相同或者出現在不同的位置。 

記 |s||s| 為字串 ss 的長度,對於兩個字串 ss 和 tt ,定義 ss 的字典序比 tt 小,當且僅當存在非負整數 k(≤min(|s|,|t|))k(≤min(|s|,|t|)) 使得 ss 的前 kk 個字元與 tt 的前 kk 個字元對應相同,並且要麼滿足 |s|=k|s|=k 且 |t|>k|t|>k,要麼滿足 kinput

第一行包含乙個整數 tt,表示有 tt 組測試資料。 

接下來依次描述 tt 組測試資料。對於每組測試資料: 

第一行包含兩個整數 nn 和 qq,表示字串的長度以及詢問的次數。 

第二行包含乙個長為 nn 的只包含大寫英文本母的字串 a[1,n]a[1,n]。 

接下來 qq 行,每行包含兩個整數 li,rili,ri,表示第 ii 次詢問的引數。 

保證 1≤t≤101≤t≤10,1≤n,q≤1051≤n,q≤105,1≤li≤ri≤n1≤li≤ri≤n。

output

對於每組測試資料,先輸出一行資訊 "case #x:"(不含引號),其中 x 表示這是第 xx 組測試資料,接下來 qq 行,每行包含乙個整數,表示字串 a[l,r]a[l,r] 中字典序最小的子串個數,行末不要有多餘空格。

sample input

1

2 3ab

1 11 2

2 2

sample output

case #1:11

1

解析:利用字首和求解,兩層for迴圈,第一層 i 從0 ~ 25分別代表26個大寫字母,第二層 j 從1到字串長度 len 遍歷,用dp[ i][ j ] 代表截止到 j 位置時字母 i 的數量,對於每個區間用 ans=dp[ i ][ r ] - dp[ i ][ l -1 ]; 即可得出結果,詳見**。

#include#includeusing namespace std;

const int maxn=1e5+10;

char s[maxn];

int dp[26][maxn];

int main()

} printf("case #%d:\n",c++);

while(q--)

printf("%d\n",ans);

} } return 0;

}

103 子串查詢

記憶體限制 256 mib時間限制 500 ms標準輸入輸出 題目型別 傳統評測方式 文字比較 上傳者 匿名 提交提交記錄 統計討論 測試資料 題目描述 這是一道模板題。給定乙個字串 a aa 和乙個字串 b bb,求 b bb 在 a aa 中的出現次數。a aa 中不同位置出現的 b bb 可重...

指標 查詢子串

c 實驗11 1 8 指標 查詢子串 20分 本題要求實現乙個字串查詢的簡單函式。函式介面定義 char search char s,char t 函式search在字串s中查詢子串t,返回子串t在s中的首位址。若未找到,則返回null。裁判測試程式樣例 include define maxs 30...

查詢 子字串查詢

子字串查詢 子字串查詢的常見方法 暴力破解 sunday和kmp。1 暴力查詢 暴力查詢就是用兩個指標i,j分別指向字串和子字串,如果指標指向的字元相等則兩指標右移 否則,指向字串的指標i回到本次匹配的下乙個位置,而指向匹配字串的指標j回到匹配字串的開頭。public int search stri...