USACO CHA1 破碎的項鍊

2021-10-17 15:16:33 字數 3158 閱讀 7277

usaco training的**又進不去了,所以我將刷題**轉到了acwing。

這個**上的相關題目是已經經過翻譯了的,比較友好。我個人購買了acwing上y總的usaco training習題輔導的網課,對刷題很有幫助。

牛課上也可以找到這套題的漢化版,但是個人還是更喜歡acwing,因為當題目wa掉的時候,他會給出wa了的測試資料。

鏈結

例如 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

b r r r

b r r r

r r r b

r b r r r w

樣例 a 樣例 b

r 紅珠子

b 藍珠子

w 白珠子

對項鍊的第一顆珠子和第二顆珠子進行了標記。

樣例 a 中的項鍊只包含藍紅兩種顏色的珠子,將所有珠子按順序記錄顏色為:

brbrrrbbbrrrrrbrrbbrbbbbrrrrb

假設你現在要將項鍊從某個點處斷開,並將斷開後的項鍊拉直擺放,然後從一端開始收集相同顏色的珠子,直到碰到另一種顏色的珠子為止,完成後在另一端進行相同的操作(這次收集的珠子的顏色可能與之前收集的顏色並不相同)。

現在,你需要判斷在項鍊的哪一處將項鍊斷開,可以使得我們收集珠子的數量達到最多。

例如,對於樣例 a 提供的項鍊,我們在 9 號珠子和 10號珠子之間斷開項鍊,或者在 24 號珠子和 25 號珠子之間斷開項鍊,可以收集到最多 8 個珠子。

另外,某些項鍊除藍紅珠子外,還包含白珠子,如樣例 b 所示。

收集珠子時,如果我們遇到了白色珠子,那麼我們可以將它視為紅色或藍色,並將其塗上相應的顏色。

表示項鍊的字串只包含 r,w,b 三種字元。

請你編寫乙個程式,求出我們可以收集珠子的最大數目。

輸入格式

第一行包含整數 n,表示珠子的數量。

第二行包含乙個由 n 個字元構成的字串,字串中只包含r,w,b 三種字元。

輸出格式

共一行,包含乙個整數表示我們可以收集珠子的最大數目。

資料範圍

3 ≤ n ≤ 350

輸入樣例

29

wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

輸出樣例

11
題目的理解

項鍊是乙個圈,從不同的點斷開向量我們會得到不同的線形項鍊。從所得線性項鍊的兩端開始取珠子,直至珠子顏色與之前所取顏色不同(白色珠子既可以當作紅色也可以當作藍色)。問這個項鍊最多能取到多少珠子。

我們在某個位置打斷項鍊是不破壞項鍊珠子的。也就是說,對於乙個長為n的項鍊,其答案的最大值是n。我一開始理解錯了題意,導致wa了一次。

做題思路

這個題的資料範圍是很小的,所以我們可以通過列舉的方法求解。遍歷從每乙個點斷開時形成的線性項鍊可以取到的珠子個數,取最大值即可。

小技巧

項鍊是乙個圈,而我們儲存的時候存的是乙個陣列,所以從某點斷開後形成的線形項鍊不方便直接表示。

我們可以在當前陣列的尾部再接上一次當前陣列。這樣,我們從某個點斷開後形成的線性項鍊,就是當前點再向後取n - 1個點。

即,從2號點斷開後形成的項鍊是2 ~ 2+n-1。我們只需遍歷0 ~ n-1即可。

#include #include #include using namespace std;

int n, ans = 0;

int left, right;

char necklace[1000];

int main()

for (int i = 0; i < n; i++)

else if (nowcolor != 0 && necklace[j] != 'w' && necklace[j] != nowcolor)

left++;

}nowcolor = 0;

for (int j = end; j >= start; j--)

else if (nowcolor != 0 && necklace[j] != 'w' && necklace[j] != nowcolor)

right++;

}ans = max(ans, left + right);

}if (ans > n)

cout << ans << endl;

system("pause");

return 0;

}

如果該題解對您有幫助的話,希望您不吝點讚。

歡迎討論交流,期待共同進步!

USACO Section1 2破碎的項鍊

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

USACO 1 1 破碎的項鍊

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

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

7 4 1.1.4 破碎的項鍊 80分 你有一條由 n 個紅色的,白色的,或藍色的珠子組成的項鍊 3 n 350 珠子是隨意安排的.這裡 是 n 29 的二個例子 第一和第二個珠子在中已經被作記號.a 中的項鍊可以用下面的字串表示 brbrrrbbbrrrrrbrrbbrbbbbrrrrb 假如你要...