EOJ 3194 字串消除

2022-09-04 05:24:10 字數 1497 閱讀 7077

給定乙個由大寫字母』a』、』b』、』c』構成的字串s,按如下進行消除過程:

1、字串s中連續相同字母組成的子串,如果子串的長度大於1,那麼這些子串會被同時消除,餘下的字元拼成新的字串。

例如:」abccbcccaa」中」cc」,」ccc」和」aa」會被同時消除,餘下」ab」和」b」拼成新的字串」abb」。

2、反覆進行上述消除,直到新的字串中相鄰字元都不相同為止。

例如:」abccbcccaa」經過一輪消除得到」abb」,再經過一輪消除得到」a」。

假設在對字串s消除開始前,允許在s中任意位置(第乙個字元之前、最後乙個字元之後以及相鄰兩個字元之間)插入任意乙個字元(『a』,』b』或者』c』),得到字串t,然後對字串t經過一系列消除。

請問該如何插入字元,使得字串t中被消除掉的字元總數(包括插入的字元)最多?

第 1 行:整數 t

(1≤t≤10

) 為問題數。

第 2 ~ t+1

行:每個問題佔一行,每行輸入乙個由』a』、』b』、』c』組成的字串s,長度不超過100。

對每個測試資料,首先輸出一行問題的編號(0

開始編號,格式:case #0:等)。在接下來一行中輸出被消除掉的最大字元數。

input

3

abcbcccaa

aaaabc

output

case #0:

9case #1:

4case #2:

2

第一組資料:在」abcbcccaa」的第2個字元後插入』c』得到」abccbcccaa」,消除後得到」a」,總共消除9個字元(包括插入的』c』)。

1 #include 2 #include 

3using

namespace

std;

4string x[3] = ;

5void del(int& ans,string

tmp)622

else it++;

23if(flag==0) break;24

}25 ans=ans>(len-tmp.size())?ans:len-tmp.size();26}

27int

main()

2841

}42 printf("

case #%d:\n%d\n

",m,ans);

4344}45

return0;

46 }

在字串的每個空格(包括首尾)處插入a或b或c,消除連續相同字母組成的字串,判斷無可消除字串後退出,經過幾次比較,得出消除最多的字元個數。

注意是同時消除,因此應該在消除之後從消除的地方繼續向後找字串,而不是從頭開始找。

如abccbcccaa,第一次消除cc,ccc,aa,而不是第一次消除得abbcccaa,然後繼續消除bb,ccc,aaa,這樣結果就是全部消除了,這也是我一開始wa的原因。

EOJ 1805 字串匹配 字尾陣列

給你 2 個字串 可能包括數字以及標點 長度不超過 50124,請你求出最長的連續的公共子串行。不知道是不是資料改了,導致這個似乎是n 2的演算法也能暴力過去 include using namespace std int main maxl max maxl,len printf d n maxl...

hihocoder 1039 字串消除 模擬

題意 給定乙個只由組成的字串s,長度為n,故包含n 1個空隙 現要求在某個空隙插入乙個來自的字元,然後按照以下 消除規則 對插入後的字串進行消除操作,問最多能消掉幾個字元 包含插入的乙個 消除規則 1.自左至右掃瞄當前字串,若字元v從某個位置開始連續出現了2次及以上,則此區間內的v全部消除 2.重複...

1039 字元消除

字元消除,正好簡單複習一下,c 中的容器。容器使用起來還是比較方便的,包括string型別,還是要經常寫寫,才知道自己那些地方有問題。include stdafx.h include include include using namespace std string stringremove st...