题目意思:
妈祖游戏,现有一个小球,他的颜色范围x(x>=1&&x<=k)并且等待发射。在一个管道里有n个小球(n>=1&&n<=100),每个小球的颜色为ci(ci>=1&&c1<=k),现在小球可以发射到管道内的任意位置,当管道内存在三个或三个以上的球的眼色相同时,则这些球就会消失,现让你使得小球发射的位置适当,使得管道内消失的球最多数目(不包括发射小球)。
解题思路:
暴力,枚举小球发射的位置,并根据题意模拟小球消失,来求最大的消失个数。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int map[110][110];
int solve(int n,int x){
int ans = 0;
int i,j;
int l,r,tmp0,tmp1,tmpf,tmp2;
for( i=0;i<=n;++i){
for( j=n;j>i;--j){
map[i][j] = map[i][j-1];
}
map[i][j] = x;
l = j-1;r = j+1;
tmpf = x;
tmp2 = 0;
tmp0 = 0;
tmp1 = 1;
while(1){
while(r<=n&&map[i][r]==tmpf){
r++;
tmp0++;
}
while(l>=0&&map[i][l]==tmpf){
l--;
tmp1++;
}
if(tmp0+tmp1>=3){
tmp2+=tmp0+tmp1;
if(l>=0){
tmpf = map[i][l];
--l;
tmp1=1;
tmp0 = 0;
}
else if(r<=n){
tmpf = map[i][r];
++r;
tmp0=1;
tmp1 = 0;
}
else {
//tmp0 = tmp1 = 0;
break;
}
}
else break;
}
if(ans<tmp2)
ans = tmp2;
}
if(ans>0)ans--;
return ans;
}
int main(){
int n,k,x,c;
while(scanf("%d%d%d",&n,&k,&x)!=EOF){
//init();
for(int i=0;i<n;++i){
scanf("%d",&map[0][i]);
//vt.push_back(c);
}
for(int i=1;i<=n;++i){
for(int j=0;j<n;++j)
map[i][j] = map[0][j];
}
int ans = solve(n,x);
printf("%d\n",ans);
}
return 0;
}