1 条题解
-
0
C++ :
#include <iostream> #include <cstring> using namespace std; int main() { char s[700],c=0; int n,i,temp=0,num=0,w=0,ans=0; cin>>n>>s; memcpy(s+n,s,n);//copy for (i=0;i<n*2;i++) if (s[i]=='w') num++,w++; //如果是w,把它视为当前颜色,并计数,下面有用 else if (s[i]==c) num++,w=0;//是当前连续的颜色,计数,w清零 else //不是的话 { if (temp+num>ans) ans=temp+num;//做一次比较,记录ans temp=num-w;num=w+1;w=0;c=s[i];//连续的颜色改变,就开始用temp记录,比如wwwbrwrbww,生成wwwbrwrbwwwwwbrwrbww; // 一开始是w那么w++;在s【3】时改变temp=0;因为没别的颜色。w就看作b;b=4; //下一次颜色改变,temp=4,num=1;因为b后没有w这时连续颜色为r有w;以此类推; //这样子不断重复,其实就是过滤w,只有r,b只要求一个点左边连续的rrrbbbb呀就行在改变点 //断开就可以了;当然会有重复,比如wwwwbbbbrrrr,这是就输出n //最后的语句就是判断 } if (temp+num>ans) ans=temp+num;// cout<<(ans>n?n:ans)<<endl;// return 0; }
Pascal :
program beads; var s:ansistring; bl,rl,br,rr:array[0..351]of integer; i,n,max,temp:integer; begin readln(n); readln(s); bl[0]:=0; rl[0]:=0; for i:=1 to n do begin case s[i] of 'r': begin rl[i]:=rl[i-1]+1; bl[i]:=0; end; 'b': begin bl[i]:=bl[i-1]+1; rl[i]:=0; end; 'w': begin bl[i]:=bl[i-1]+1; rl[i]:=rl[i-1]+1; end; end; end; bl[0]:=bl[n]; rl[0]:=rl[n]; for i:=1 to n do begin case s[i] of 'r': begin rl[i]:=rl[i-1]+1; bl[i]:=0; end; 'b': begin bl[i]:=bl[i-1]+1; rl[i]:=0; end; 'w': begin bl[i]:=bl[i-1]+1; rl[i]:=rl[i-1]+1; end; end; if rl[i]>n then rl[i]:=n; if bl[i]>n then bl[i]:=n; end; br[n+1]:=0; rr[n+1]:=0; for i:=n downto 1 do begin case s[i] of 'r': begin rr[i]:=rr[i+1]+1; br[i]:=0; end; 'b': begin br[i]:=br[i+1]+1; rr[i]:=0; end; 'w': begin br[i]:=br[i+1]+1; rr[i]:=rr[i+1]+1; end; end; end; br[n+1]:=br[1]; rr[n+1]:=rr[1]; for i:=n downto 1 do begin case s[i] of 'r': begin rr[i]:=rr[i+1]+1; br[i]:=0; end; 'b': begin br[i]:=br[i+1]+1; rr[i]:=0; end; 'w': begin br[i]:=br[i+1]+1; rr[i]:=rr[i+1]+1; end; end; if rr[i]>n then rr[i]:=n; if br[i]>n then br[i]:=n; end; bl[n+1]:=bl[1]; br[n+1]:=br[1]; rl[n+1]:=rl[1]; rr[n+1]:=rr[1]; max:=-1; for i:=1 to n do begin if bl[i]>rl[i]then temp:=bl[i] else temp:=rl[i]; if br[i+1]>rr[i+1]then inc(temp,br[i+1]) else inc(temp,rr[i+1]); if temp>max then max:=temp; if max>n then max:=n; end; writeln(max); end.
- 1
信息
- ID
- 3252
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者