描述
祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。
开发商最近准备为玩家写一个游戏过程的回放工具。他们已经在游戏内完成了过程记录的功能,而回放功能的实现则委托你来完成。
游戏过程的记录中,首先是轨道上初始的珠子序列,然后是玩家接下来所做的一系列操作。你的任务是,在各次操作之后及时计算出新的珠子序列。
输入
第一行是一个由大写字母'A'~'Z'组成的字符串,表示轨道上初始的珠子序列,不同的字母表示不同的颜色。
第二行是一个数字n,表示整个回放过程共有n次操作。
接下来的n行依次对应于各次操作。每次操作由一个数字k和一个大写字母Σ描述,以空格分隔。其中,Σ为新珠子的颜色。若插入前共有m颗珠子,则k ∈ [0, m]表示新珠子嵌入之后(尚未发生消除之前)在轨道上的位序。
输出
输出共n行,依次给出各次操作(及可能随即发生的消除现象)之后轨道上的珠子序列。
如果轨道上已没有珠子,则以“-”表示。
样例
见英文题面
限制
0 ≤ n ≤ 10^4
0 ≤ 初始珠子数量 ≤ 10^4
时间:2 sec
内存:256 MB
提示
列表
题意:输入一个字符串,在某个位置插入某个字母,如果有连续3个以上相同的就消除。输出最后的字符串
思路:完全字符串操作,将字母插入编程完整字符串,然后匹配3个以上的字符删除,知道没有可消除的位置。
注意:输入字符串可能为空,所以第一行用gets 而不是scanf
拼接字符串用
strcpy(tmp,str+i);
strcpy(str+startpos,tmp);而非 strcpy(str+startpos,str+i);
原因是为什么?我还有些疑问orz
代码:
1 #include2 #include 3 #include 4 using namespace std; 5 char str[20005]; 6 int n; 7 char tmp[20005]; 8 void cal(int t,char ch){ 9 char *p;10 p=str;11 strcpy(tmp,p+t);12 str[t]=ch;13 strcpy(str+t+1,tmp);14 }15 16 bool hasRepeat(){17 int len=strlen(str);18 int i=0;19 while(i =3){28 strcpy(tmp,str+i);29 strcpy(str+startpos,tmp);30 return true;31 }32 }33 return false;34 }35 int main(){36 int t;37 char ch;38 gets(str);39 scanf("%d",&n);40 for(int i=0;i