codeforces B. Balls Game 解题报告

题目链接:http://codeforces.com/problemset/problem/430/B

题目意思:给出用不多于k种颜色对n个球的染色情况,以及手中的唯一一个球的颜色。初始时,连续的相同颜色的球不多于两个。问用这个手中的球射向同种颜色且不少于两个时,能够destroy的球的数量的最多情况。

      关键之处就是如何处理删除同种颜色的球之后序列的变化情况。这就需要两个指针记录位置。

    

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn = 100 + 10;
 8 int c[maxn], ans, maxx;
 9 
10 int main()
11 {
12     int n, x;
13     while (scanf("%d%d%d", &n, &x, &x) != EOF)
14     {
15         ans = 0;
16         for (int i = 0; i < n; i++)
17             scanf("%d", &c[i]);
18         for (int i = 1; i < n; i++)
19         {
20             int k, j;
21             if (c[i] == c[i-1] && c[i] == x)
22             {
23                 int l = i-2;
24                 int r = i+1;
25                 int s = 2;
26                 while (1)
27                 {
28                     int k1 = 0, k2 = 0;
29                     for (j = l; j >= 0; j--)
30                     {
31                         if (c[j] != c[l])
32                             break;
33                         k1++;
34                     }
35                     for (k = r; k < n; k++)
36                     {
37                         if (c[k] != c[r])
38                             break;
39                         k2++;
40                     }
41                     if (k1 + k2 >= 3 && c[l] == c[r])
42                     {
43                         l = j;
44                         r = k;
45                         s += k1+k2;
46                     }
47                     else
48                     {
49                         ans = max(ans, s);
50                         break;
51                     }
52                 }
53             }
54         }
55         printf("%d\n", ans);
56     }
57     return 0;
58 }

 

posted @ 2014-05-13 22:12  windysai  阅读(229)  评论(0编辑  收藏  举报