题目链接: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 ", ans); 56 } 57 return 0; 58 }