壞掉的項鍊 破環成鏈

2021-09-11 17:41:37 字數 1170 閱讀 1464

你有一條由n個紅色的,白色的,或藍色的珠子組成的項鍊(3<=n<=350),珠子是隨意安排的。 這裡是 n=29 的二個例子:

第一和第二個珠子在中已經被作記號。

brbrrrbbbrrrrrbrrbbrbbbbrrrrb

假如你要在一些點打破項鍊,展開成一條直線,然後從一端開始收集同顏色的珠子直到你遇到乙個不同的顏色珠子,在另一端做同樣的事(顏色可能與在這之前收集的不同)。 確定應該在**打破項鍊來收集到最大數目的珠子。

例如,在 a 中的項鍊中,在珠子 9 和珠子 10 或珠子 24 和珠子 25 之間打斷項鍊可以收集到8個珠子。

白色珠子什麼意思?

在一些項鍊中還包括白色的珠子(如b) 所示。

當收集珠子的時候,乙個被遇到的白色珠子可以被當做紅色也可以被當做藍色。

表現含有白珠項鍊的字串將會包括三個符號 r , b 和 w 。

寫乙個程式來確定從一條被給出的項鍊可以收集到的珠子最大數目。

第 1 行: n, 珠子的數目

第 2 行: 一串長度為n的字串, 每個字元是 r , b 或 w。

輸出一行乙個整數,表示從給出的項鍊中可以收集到的珠子的最大數量。

29wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

題目翻譯來自nocow。

usaco training section 1.1

類似的題目還有「友好城市」、「能量項鍊」等,由於都涉及向前和向後搜尋,因此用到乙個方法,我把它叫做破環成鏈。顧名思義,就是把圓形的東西變成一條直線。看看資料規模,允許我們這麼做。不同的是,這裡要複製三次,因為有向後。然後再注意一下細節,考慮周到一點就行了。

#includeusing namespace std;

string s;

int f(int x)

for(int i=x+1;;i++)

return sum;

}int main()

ans=max(ans,f(i));

} ans=min(ans,n);//不能超過總長度

if(ans==-1) ans=n;//這樣子一定是一路continue

cout<

}

c aw 能量項鍊(破環成鏈)

對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤 吸盤是mars人吸收能量的一種器官 的作用,這兩顆珠子才能聚合成一顆珠子,同時釋放出可以被吸盤吸收的能量。如果前一顆能量珠的頭標記為m,尾標記為r,後一顆能量珠的頭標記為 r,尾標記為 n,則聚合後釋放的能量為...

壞掉的項鍊

描述 你有一條由n個紅色的,白色的,或藍色的珠子組成的項鍊 3 n 350 珠子是隨意安排的。這裡是 n 29 的二個例子 1 2 1 2 r b b r b r r b r b b b r r b r r r w r b r w w b b r r b b b b b b r b r r b r ...

壞掉的項鍊

題目鏈結 題目描述 你有一條由 nnn 個紅色的,白色的,或藍色的珠子組成的項鍊,珠子是隨意安排的。這裡是 n 29n 29n 29 的兩個例子 第一和第二個珠子在中已經被作記號。假如你要在一些點打破項鍊,展開成一條直線,然後從一端開始收集同顏色的珠子直到你遇到乙個不同的顏色珠子,在另一端做同樣的事...