咕咕東很聰明,但他最近不幸被來自宇宙的宇宙射線擊中,遭到了降智打擊,他的英語水平被歸零了!這一切的始作俑者宇宙狗卻毫不知情!
此時咕咕東碰到了乙個好心人——tt,tt在吸貓之餘教咕咕東學英語。今天tt打算教咕咕東字母a 和字母b,tt給了咕咕東乙個只有大寫a、b組成的序列,讓咕咕東分辨這些字母。
但是咕咕東的其他學科水平都還在,敏銳的咕咕東想出乙個問題考考tt:咕咕東問tt這個字串 有多少個子串是delicious的。
tt雖然會做這個問題,但是他吸完貓發現輝夜大小姐更新了,不想回答這個問題,並拋給了你, 你能幫他解決這個問題嗎?
delicious定義:對於乙個字串,我們認為它是delicious的當且僅當它的每乙個字元都屬於乙個 大於1的回文子串中。
首先要分析什麼樣的子串是delicious的:該字串每個字元都屬於乙個大於1的回文子串中。可知aa、bb、aba、bab等都是delicious的。再多寫一寫就會發現規律,當ab或者ba(其中乙個字母只有乙個,另乙個字母大於等於乙個)時才不是delicious的。所以應遍歷字串,根據發現的規律來進行判斷。
資料範圍最大為3*10^5,不能求出每乙個子串在根據規律來判斷。應該進行優化。於是想到在求子串時可以記錄a與b的個數numa,numb,以及abab序列的個數sum(如aaabba就有3個aba序列),在判斷子串是否滿足delicious時,可根據這三個資訊來判斷。
對長度大於一的子串進行判斷:如果全a或全b(即sum=1),則一定delicious;如果是ab型,ab的個數都大於一,則delicious,否則不delicious;如果是aba或bab型,此時它一定delicious,而且在它的基礎上形成的後續子串也一定delicious,於是可以在此進行剪枝。
一道資料範圍很大的題目,對應csp t4,需要好好對複雜度進行優化。一開始想到o(n2)的演算法,然後在之後優化時想到了以上的剪枝。因為資料是隨機生成的比較水,剪枝的演算法就能直接過。如果極端資料如全是a,就無法剪枝,這樣就是o(n2)的時間複雜度,會超時。同時應注意答案應該是long long int。
#include
using
namespace std;
int n;
char s[
300010];
long
long
int ans=0;
intmain()
}}cout<
}
T4 咕咕東學英語(Week12模測)
咕咕東很聰明,但他最近不幸被來自宇宙的宇宙射線擊中,遭到了降智打擊,他的英語水平被歸 零了!這一切的始作俑者宇宙狗卻毫不知情!此時咕咕東碰到了乙個好心人 tt,tt在吸貓之餘教咕咕東學英語。今天tt打算教咕咕東字母a 和字母b,tt給了咕咕東乙個只有大寫a b組成的序列,讓咕咕東分辨這些字母。但是咕...
week4實驗B 咕咕東想吃飯
題目 咕咕東考試周開始了,考試周一共有n天。他不想考試周這麼累,於是打算每天都吃頓好的。他決定每天都吃生煎,咕咕東每天需要買a i 個生煎。但是生煎店為了刺激消費,只有兩種購買方式 在某一天一次買兩個生煎。今天買乙個生煎,同時為明天買乙個生煎,店家會給乙個券,第二天用券來拿。沒有其餘的購買方式,這兩...
T4 咕咕東學英語(模擬題
題目解析 首先讓ans最大組合取ans n n 1 2.因為有這樣乙個字串,它的每乙個字元都屬於乙個長度大於1的回文子串中 所以回文子串組合,比如長度為5的字串 最多的子串組合,無非是 s1s2 s1s2s3 s1s2s3s4 s1s2s3s4s5 s2s3 s2s3s4 s2s3s4s5 s3s4...