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
29sample outputwwwbbrwrbrbrrbrbrwrwwrbwrwrrb
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記錄下它的數目,直到遇到乙個...