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 }

posted on 2012-05-12 18:40  usp10  阅读(123)  评论(0编辑  收藏  举报

导航