1. 程式人生 > >T4310 祖瑪遊戲

T4310 祖瑪遊戲

n) 連鎖 lag lin 操作 ins int log pac

題目描述

祖瑪是一款曾經風靡全球的遊戲,其玩法是:在一條軌道上初始排列著若幹

個彩色珠子,其中任意三個相鄰的珠子不會完全同色。此後,你可以發射珠子到

軌道上並加入原有序列中。一旦有三個或更多同色的珠子變成相鄰,它們就會立

即消失。這類消除現象可能會連鎖式發生,其間你將暫時不能發射珠子。

開發商最近準備為玩家寫一個遊戲過程的回放工具。 他們已經在遊戲內完成

了過程記錄的功能,而回放功能的實現則委托你來完成。

遊戲過程的記錄中,首先是軌道上初始的珠子序列,然後是玩家接下來所做

的一系列操作。你的任務是,在各次操作之後及時計算出新的珠子序列。

輸入輸出格式

輸入格式:

第一行是一個由大寫字母‘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 }

T4310 祖瑪遊戲