7 4 1 1 4 破碎的項鍊 80分

2021-10-07 17:58:14 字數 2010 閱讀 4593

7-4 1.1.4 破碎的項鍊 (80分)

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

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

a 中的項鍊可以用下面的字串表示:

brbrrrbbbrrrrrbrrbbrbbbbrrrrb .

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

example

在 a 中的項鍊,可以收集到 8 個珠子, 在珠子 9 和珠子 10 或珠子 24 和珠子 25 之間打斷項鍊. 在一些項鍊中,包括白色的珠子如 b 所示. 當收集珠子的時候,乙個被遇到的白色珠子可以被當做紅色也可以被當做藍色. 表現項鍊的字串將會包括三符號 r , b 和 w .

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

輸入格式:

第 1 行: n, 珠子的數目

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

輸出格式:

單獨的一行包含從被**的項鍊可以被收集的珠子數目的大值.

輸入樣例1:

在這裡給出一組輸入。例如:

29

wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

輸出樣例1:

在這裡給出相應的輸出。例如:

輸入樣例2:

6

wwwwww

輸出樣例2:

輸入樣例3:

6

rrrbbb

輸出樣例3:

【題意】

【思路】

【源**】

#include

#include

using

namespace std;

intlength

(const

int n, string* s)

// 在n,(n+1)之間斷開得到的長度;

elseif(

(*s)

[i]==

'w')

// 遇上白色珠子,同化;

else

}for

(int i =

(n +1)

;; i++

)// 往後看,得到斷點後的長度;

elseif(

(*s)

[i]==

'w')

// 遇上白色珠子,同化;

else

}return len;

}int

main()

if(str[i]

=='w'

) ans =

max(ans,

length

(i,&str));

// 及時更新最長的長度;

} ans =

min(ans, n)

;// 最長長度<=原項鍊的總長;

if(ans ==-1

)// 項鍊上的珠子全為同一種顏色;

cout << ans << endl;

return0;

}

USACO Section1 2破碎的項鍊

很明顯使用模擬的方法進行搜尋。但是一開始只是憑感覺寫了出來,有些樣例沒有過,仔細想想才明白自己沒有完全明白怎樣模擬,下面是大體思路 如果開始是一串連續的w 記錄下它的數目,直到遇到一串或乙個b或 r,再把它們的數目加在一起,作為一次可能的結果。如果開始是乙個或一串b或 r記錄下它的數目,直到遇到乙個...

USACO 1 1 破碎的項鍊

description 你有一條由n個紅色的,白色的,或藍色的珠子組成的項鍊 3 n 350 珠子是隨意安排的。這裡是 n 29 的二個例子 r 代表 紅色的珠子 b 代表 藍色的珠子 w 代表 白色的珠子 第一和第二個珠子在中已經被作記號。brbrrrbbbrrrrrbrrbbrbbbbrrrrb...

USACO CHA1 破碎的項鍊

usaco training的 又進不去了,所以我將刷題 轉到了acwing。這個 上的相關題目是已經經過翻譯了的,比較友好。我個人購買了acwing上y總的usaco training習題輔導的網課,對刷題很有幫助。牛課上也可以找到這套題的漢化版,但是個人還是更喜歡acwing,因為當題目wa掉的...