首页 > 代码库 > T4310 祖玛游戏

T4310 祖玛游戏

题目描述

祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干

个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到

轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立

即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。

开发商最近准备为玩家写一个游戏过程的回放工具。 他们已经在游戏内完成

了过程记录的功能,而回放功能的实现则委托你来完成。

游戏过程的记录中,首先是轨道上初始的珠子序列,然后是玩家接下来所做

的一系列操作。你的任务是,在各次操作之后及时计算出新的珠子序列。

输入输出格式

输入格式:

第一行是一个由大写字母‘A‘~‘Z‘组成的字符串, 表示轨道上初始的珠子序列,

不同的字母表示不同的颜色。

第二行是一个数字n,表示整个回放过程共有n次操作。

接下来的n行依次对应于各次操作。每次操作由一个数字k和一个大写字母∑

描述, 以空格分隔。 其中, ∑为新珠子的颜色。 若插入前共有m颗珠子, 则k ∈ [0,m]

表示新珠子嵌入之后(尚未发生消除之前)在轨道上的位序。

输出格式:

输出共n行,依次给出各次操作(及可能随即发生的消除现象)之后轨道上

的珠子序列.

如果轨道上已没有珠子,则以“-”表示。

输入输出样例

输入样例#1:
ACCBA51 B0 A2 B4 C0 A
输出样例#1:
ABCCBAAABCCBAAABBCCBA-A

说明

100%的数据满足1 ≤ n ≤ 10^3 ,0 ≤ m ≤ 2 × 10^3 。

 

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int where; 6 int flag=0; 7 string c; 8 string a; 9 int n;10 void pd()11 {12     int tot=1;13     do14     {15         flag=0;16         tot=1;17         int h=where-1,t=where+1,now=where;18         while(a[h]==a[now]&&h>=0)19         {20             tot++;21             h--;22         }23         h++;24         while(a[t]==a[now]&&t<a.size())25         {26             tot++;27             t++;28         }29         t--;30         if(tot>=3)31         {32             //cout<<endl<<a<<"******"<<endl;33             a.erase(h,tot);34             flag=1;35             //cout<<endl<<a<<"-------"<<endl;36         }37         where=h;38     }while(flag==1);39 40 }41 int main()42 {43     getline(cin,a);44     scanf("%d",&n);45     while(n--)46     {47         cin>>where>>c;48         a.insert(where,c);49         pd();50         if(a.size()==0)51         cout<<"-"<<endl;52         else cout<<a<<endl;53     }54     return 0;55 }

 

T4310 祖玛游戏