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輸出樣例1:wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
在這裡給出相應的輸出。例如:
輸入樣例2:6輸出樣例2: 輸入樣例3:wwwwww
6輸出樣例3: 【題意】rrrbbb
【思路】
【源**】
#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掉的...