T4310 祖玛游戏
题目描述
祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干
个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到
轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立
即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。
开发商最近准备为玩家写一个游戏过程的回放工具。 他们已经在游戏内完成
了过程记录的功能,而回放功能的实现则委托你来完成。
游戏过程的记录中,首先是轨道上初始的珠子序列,然后是玩家接下来所做
的一系列操作。你的任务是,在各次操作之后及时计算出新的珠子序列。
输入输出格式
输入格式:第一行是一个由大写字母'A'~'Z'组成的字符串, 表示轨道上初始的珠子序列,
不同的字母表示不同的颜色。
第二行是一个数字n,表示整个回放过程共有n次操作。
接下来的n行依次对应于各次操作。每次操作由一个数字k和一个大写字母∑
描述, 以空格分隔。 其中, ∑为新珠子的颜色。 若插入前共有m颗珠子, 则k ∈ [0,m]
表示新珠子嵌入之后(尚未发生消除之前)在轨道上的位序。
输出格式:输出共n行,依次给出各次操作(及可能随即发生的消除现象)之后轨道上
的珠子序列.
如果轨道上已没有珠子,则以“-”表示。
输入输出样例
输入样例#1:
ACCBA 5 1 B 0 A 2 B 4 C 0 A
输出样例#1:
ABCCBA AABCCBA AABBCCBA - 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 do 14 { 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 }
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。