USACO 1 1 破碎的項鍊

2021-07-11 01:57:59 字數 2210 閱讀 5740

description

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

r 代表 紅色的珠子 

b 代表 藍色的珠子 

w 代表 白色的珠子 

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

brbrrrbbbrrrrrbrrbbrbbbbrrrrb . 

假如你要在一些點打破項鍊,展開成一條直線,然後從一端開始收集同顏色的珠子直到你遇到乙個不同的顏色珠子,在另一端做同樣的事。(顏色可能與在這之前收集的不同) 確定應該在**打破項鍊來收集到最大多數的數目的子。 example 舉例來說,在 a 中的項鍊,可以收集到8個珠子,在珠子 9 和珠子 10 或珠子 24 和珠子 25 之間打斷項鍊。 在一些項鍊中,包括白色的珠子如 b 所示。 當收集珠子的時候,乙個被遇到的白色珠子可以被當做紅色也可以被當做藍色。 表現項鍊的字串將會包括三符號 r , b 和 w 。 寫乙個程式來確定從一條被**的項鍊最大可以被收集珠子數目。 

input

第 1 行: n, 珠子的數目 

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

output

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

sample input

29 

wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

sample output

11

解題思路:

模擬在字串的每個位置切開,然後用

while

語句進行計數,當

max為最大的時候輸出即可。

程式:
var
i,j,l,x,y,n,max:longint;
s:array[1..1000] of char;
begin
readln(n);
for i:=1 to n do
read(s[i]);

s[n+1]:=s[n];
for i:=1 to n do
begin

j:=0;

x:=i;

while (s[x]='w') and (j

begin

inc(j);

dec(x);

if x<1 then x:=n;

end;

l:=x;

while (s[x]=s[l]) and (j

begin

inc(j);

dec(x);

if x<1 then x:=n;

end;

y:=i+1;

if y>n then y:=1;

while (s[y]='w') and (j

begin

inc(j);

inc(y);

if y>n then y:=1;

end;

l:=y;

while (s[y]=s[l]) and (j

begin

inc(j);

inc(y);

if y>n then y:=1;

end;

if j>max then max:=j;

end;

writeln(max);
end.

USACO 1 1 我的題解和程式

usaco這個東西,有很多大牛已經 通關 了,還有的大牛有三天做了兩大章的事蹟,像我這樣的小菜,就慢慢從1.1往後來吧 1.1.1 ride 這個是第一題,純水,但是因為不知道usaco對輸出的回車符敏感,必須用writeln,所以交了好多次才ac,唯一注意的是關於乘的變數別忘了初始化成1 prog...

USACO 1 1貪婪的送禮者題解

又過了一道大水題。這道題目並不是特別難,如果用了map結構就很簡單了。但是有幾個地方比較坑。這樣他預先準備的錢不一定會送出。所以你懂得 還有乙個地方就是有可能這個人不送給別人錢,那麼這種情況就要continue掉,要不然求平均數時會因分母變0而報錯 最後我們來講一下map用法 首先我們要用map標頭...

USACO Section1 2破碎的項鍊

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