祖玛游戏
原创
©著作权归作者所有:来自51CTO博客作者背着代码的蜗牛的原创作品,请联系作者获取转载授权,否则将追究法律责任
祖玛游戏
问题描述:
祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。
开发商最近准备为玩家写一个游戏过程的回放工具。他们已经在游戏内完成了过程记录的功能,而回放功能的实现则委托你来完成。
游戏过程的记录中,首先是轨道上初始的珠子序列,然后是玩家接下来所做的一系列操作。你的任务是,在各次操作之后及时计算出新的珠子序列。
输入格式:
第一行是一个由大写字母’A’~’Z’组成的字符串,表示轨道上初始的珠子序列,不同的字母表示不同的颜色。
第二行是一个数字,表示整个回放过程共有次操作。
接下来的行依次对应于各次操作。每次操作由一个数字和一个大写字母描述,以空格分隔。其中,为新珠子的颜色。若插入前共有颗珠子,则表示新珠子嵌入之后(尚未发生消除之前)在轨道上的位序。
输出格式:
输出共行,依次给出各次操作(及可能随即发生的消除现象)之后轨道上的珠子序列。
如果轨道上已没有珠子,则以“-”表示。
样例输入:
ACCBA
5
1 B
0 A
2 B
4 C
0 A
样例输出
ABCCBA
AABCCBA
AABBCCBA
-
A
规则:
这个游戏与平时的祖玛游戏不太一样。
在AAABBCCC中的A和B之间插入B时,BBB消去,CCC也消去,但是AAA不会改变。
输入也会出现空串的情况,使用gets读
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=2010;
int n,x;
char y,a[maxn],tmp[maxn];
bool judge(int t)
{
int step=0,tmpo=t;
while(tmpo<=strlen(a)&&a[tmpo++]==a[t])
step++;tmpo=t-1;
while(tmpo>=0&&a[tmpo--]==a[t])
step++;
if(step>=3)
return 1;
return 0;
}
int change(int t)
{
int end=t,star=t;
while(a[star]==a[t])
star--;star++;
while(a[end]==a[t])
end++;
strcpy(a+star,a+end);
if(a[star]==a[star-1])
{
if(star==0)
return 1;
return star;
}
else if(a[star]==a[star+1])
return star;
return 0;
}
int main()
{
freopen("ha.in","r",stdin);
freopen("ha.out","w",stdout);
gets(a);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
strcpy(tmp,a+x);
a[x]=y;
strcpy(a+x+1,tmp);
while(judge(x))
x=change(x);
if(a[0]=='\0')
cout<<"-"<<endl;
else cout<<a<<endl;
}
fclose(stdin);fclose(stdout);
return 0;
}