T4310 祖瑪遊戲

自為風月馬前卒發表於2017-05-06

題目描述

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

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

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

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

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

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

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

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

輸入輸出格式

輸入格式:

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

 

相關文章