description
現在寶哥有乙個字串s,n(5<=n<=100000)表示字串s的長度,則字串用字元表示為s=s1s2…si…sn(si表示字串在第i個字元,定義字串下標從1開始)。寶哥想計算出下標為一對i,j(1<=i,j<=n),子串sisi+1…sj至少包含乙個字串「baoge」的數目。
如果存在下標k(i<=k<=j-4),使得sk=b,sk+1=a,sk+2=o,sk+3=g,sk+4=e,則說明子串sisi+1…sj包含字串「baoge」。
聰明的你幫baoge計算一下符合題意的下標對數目吧。多組輸入,請處理到eof
input
輸入字串s,保證字元都是小寫字母。
output
輸出乙個整數,代表下標對的數目。
sample input
abaogebtaoge
baogeaabaogec
sample output
1423
hint
第乙個樣例中可選的下標對為:(1,6),(1,7),(1,8),(1,9),(1,10),(1,11),(1,12),(2,6),(2,7),(2,8),(2,9),(2,10),(2,11),(2,12),總對數為14。
while(scanf("%s",str)!=eof)
hint已經說得很清楚了,當時比賽到了最後一小時,已經太不淡定了,沒有很好的分析題意。這道題的重點在於去除重複計算的子串,方法很簡單。舉個例子,baogebaoge,當計算第二個baoge時,直接從上乙個baoge的a開始就行了。比賽完再看這題,分分鐘思路就有了,比賽時太傻比。這道題乙個很坑人的地方就是結果要用long long ,因為結果很有可能超int 這一點wa了好幾發。。。。具體的計算方法,就是應用乘法原理,至於tmp的取值,通過幾個簡單的資料嘗試,就可以確定了。
ac**
#include#include#include#include#include#include#includeusing namespace std;
char a[100005];
int main()
}cout<}
return 0;
}
PPY的字串 字串模擬題
siry特別喜歡數學,在他很小的時候他就對數字特別感興趣,他喜歡念數字。具體唸法是這樣的 給你乙個數字,依次唸出每個數字有幾個相鄰 siry會大聲說出a個b,c個d.組合起來形成乙個新的數字。如 2331的唸法就是1個2,2個3,1個1,形成的新數字就是122311。再念一次就是1個1,2個2,1個...
字串水題
hdu 1686 給a串b串,求a串在b串 現次數。a串kmp預處理,然後再對a,b比較,用j表示匹配時a串的pos,則當j strlen a 時候,ans hdu 2087 給a串和b串,求從a串中能割出來多少個b串。對a串和b串進行預處理,這個kmp next陣列是基於a和b串的。即正常的kmp...
字串刷題
刷題總結 kuangbin帶你飛 專題十六 kmp 擴充套件kmp manacher cloned a kmp模板題 include using namespace std typedef long long ll const int ma 1e6 5 int p ma int m ma int n...