程式設計CSP M3 補題 T3 咕咕東學英語

2021-10-07 20:40:15 字數 962 閱讀 7334

乙個只有大寫a、b的序列,求這個序列有多少個子串是delicious的。

delicious:對於乙個字串,它是delicious的,當且僅當它的每乙個字元都屬於乙個長度大於1的回文子串。

第一行乙個整數n,代表序列長度

第二行乙個只含ab的字串

滿足題意的子串個數

對於這道題,我一開始是從正面下手,即找滿足條件的子串有哪些規律、特徵,然後來選擇;但情況較為複雜,在要求時間內,並沒有有效完成。後來與別人交流過程中了解到,可以從反面下手,把不滿足條件的減去,會更方便。

對於乙個長度為n的字串,可供我們選擇的子串共有n*(n-1)/2個,這是總數;而不符合條件的子串,有以下四種情況:

aa……b

bb……a

abb……b

baa……a

不難發現,後兩種正是倒序的前兩種的情況,因此我們只需從正序和倒序,找到ab相異的情況,然後從總數中減去該子串的長度,最後,由於正序和倒序過程中,會將ab、ba減去兩次,因此我們只需在第一次正序遍歷過程中,記下ab、ba的個數,最後在ans中再加上,即可得到最終答案。

#include

#include

using

namespace std;

string s;

long

long n,ans;

intmain()

} flag=s[n-1]

; index=n-1;

for(

long

long i=n-

2;i>=0;

--i)

} ans+

=cnt;

cout

}

這道題還是很注重思考的,一開始貿然的從正面入手,很容易陷入乙個大坑,難以完整解答;當遇到這種情況時,學會從反面入手,想想不滿足題意的情況,當「加法」不適用時,可以考慮「減法」,能夠有效提高做題的效率。

程式設計思維與實踐 CSP M3 補題

思路 簽到題,只要遍歷一遍陣列看一下有多少個i與i 1不相等的節點,在該節點數上加一即為答案。思路 該題只要使用兩個指針對矩陣進行兩次遍歷即可,一遍橫向遍歷,一遍縱向遍歷,遍歷過程中若遇到滿足條件的可以消除的位置,則在建立的標記陣列中的對應位置打上1 若直接修改原陣列會出現十字形無法識別的情況 兩邊...

T3提示登陸失敗

問題現象 t3 10.8 plus2 with最新增量補丁包,在win7客戶端,雙擊t3圖示,直接提示 登入失敗 問題解決過程 當時客戶反應三颱電腦,都登入失敗,嘗試過重裝軟體 註冊dll檔案等,甚至在安全模式下,把mdac相關檔案都替換,都無效,依然是登陸失敗。之前都是正常的,三颱電腦突然同時這個...

YCH的模擬賽 T3

暴搜或者字典樹,但是因為輸出所有的方案而不是方案數,不管什麼做法都逃不過輸出,所以都差不多 sol1 記憶化搜尋 當列舉方案時,f i 表示已經把字串的前i個字母都拼好的情況下有多少方案 考慮從第i 1個字元開始到j是乙個給定的單詞 如果有這樣的j的話就可以轉移 然後開乙個vector把每乙個狀態下...