usaco 1.1.4 Broken Necklace
给一串链子颜色出来,从某处断开,往两边找同颜色的珠子,两边可以不同颜色,遇到白色可以化为自己颜色,求最多。
最简单就是直接暴力,两边找,不过要注意防止他不断循环,例如全部同一颜色不多加判断就会死循环。我是找的时候顺便让她不超过另一边的珠子的坐标。
View Code
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<stdlib.h> 5 #define INF 0x3f3f3f3f 6 #define Maxin 10000 7 int main() 8 { 9 char N[400]; 10 int n,x,lr,rr,ans=0,pos=0,p; 11 char r,l; 12 scanf("%d",&n); 13 getchar(); 14 scanf("%s",N); 15 ans=0; 16 while(pos<n) 17 { 18 p=0; 19 lr=pos-1; 20 if(lr==-1) 21 lr=n-1; 22 rr=pos; 23 l=N[lr]; 24 r=N[rr]; 25 while((lr-1<0?n-1:lr-1)!=rr&&(N[lr-1<0?n-1:lr-1]==l||N[lr-1<0?n-1:lr-1]=='w')) 26 {lr--;if(lr<0)lr=n-1;} 27 while(lr!=((rr+1)%n)&&(N[(rr+1)%n]==r||N[(rr+1)%n]=='w')) 28 {rr++;if(rr==n)rr=0;} 29 if(lr<pos) 30 p+=pos-lr; 31 else 32 p+=n-lr+pos; 33 if(rr<pos) 34 p+=rr+n-pos+1; 35 else 36 p+=rr-pos+1; 37 if(p>ans) 38 ans=p; 39 pos++; 40 printf("%d %d\n",pos,ans); 41 } 42 printf("%d\n",ans); 43 return 0; 44 }