[USACO 1.1.4]破碎的项链
地址:http://hustoj.sinaapp.com/problem.php?id=1819
方法:枚举断点,注意全是w的情况
1 #include <stdio.h> 2 3 int nl[701];//necklace 4 int n;//珠子个数 5 6 int main() 7 { 8 int f1,f2,l1,l2,i=0; 9 int ca=0,cb=0,ans=0; 10 char in[701]; 11 scanf("%d",&n); 12 scanf("%s",in); 13 for(i=0;i<n;i++) 14 { 15 if('b'==in[i]) 16 { 17 nl[i]=1; 18 nl[i+n]=1; 19 } 20 else if('w'==in[i]) 21 { 22 nl[i]=10; 23 nl[i+n]=10; 24 } 25 else if('r'==in[i]) 26 { 27 nl[i]=-1; 28 nl[i+n]=-1; 29 } 30 } 31 for(i=0;i<n;i++) 32 { 33 f1=i; 34 f2=nl[f1]; 35 l1=f1+n-1; 36 l2=nl[l1]; 37 ca=0; 38 cb=0; 39 while(nl[f1]==f2 || nl[f1]==10 || f2==10) 40 { 41 if(10==f2) f2=nl[f1]; 42 ca++; 43 f1++; 44 if(f1-i==n) break; 45 } 46 while(l1>=f1 && (nl[l1]==l2 || nl[l1]==10 || l2==10)) 47 { 48 if(10==l2) l2=nl[l1]; 49 cb++; 50 l1--; 51 if(i+n-1-l1==n) break; 52 } 53 ans=(ca+cb)>ans?(ca+cb):ans; 54 } 55 printf("%d\n",ans); 56 return 0; 57 }