描述
你有個魔術瓶,經常可以給別人表演個魔術……
這個魔術是這樣的:
你有個類似試管形狀的玻璃屏(比試管大),現在可以往裡面注入X毫升的Y顏色的神奇的液體(這個顏色可能是R,Y,B中一個),這個液體神奇在哪裡?
注入這個魔術瓶後,如果瓶中本來沒有液體,那麼就沉澱在最下層;
如果瓶中有了液體,那麼判斷:如果該顏色和他下面那層的顏色一樣,就會融合成一塊,比如開始(從上往下看)液體層次顏色為R Y B R,當倒入R顏色的液體後,顏色層次還是R Y B R,但是最上面一層的體積會變化成為2者之和。如果顏色和他下面那層顏色不一樣,就會單獨產生一層覆蓋下層,例如R Y B R,倒入Y顏色後,編程Y R Y B R。
這個魔術瓶的一個神奇之處還在於,倒出液體,他只會讓最外面一層液體完全倒出,一個倒出操作下來絕對不會剩餘該層液體或者倒出下一層液體。
現在經過若干次操作後,希望你能一口給出現在魔術瓶中液體層次分布情況,也就是從上層往下層依次報出每個層次液體的顏色和體積。
-
輸入
-
第一行包含一個整數T,表示有T組測試資料。
以下每組測試資料格式:
第一行包含一個整數N,表示有N次操作。
以下N行,每行資料構造為以下2個情況:
PUT Y X 表示倒入Y顏色的液體X毫升,其中Y為R Y B中的一個,X為整數
GET 表示倒出最上層的液體。
保證資料合法性。
-
輸出
-
對於每組資料,輸出經過N次操作後的液體序列,要求如題目描述。
-
範例輸入
-
1
-
4
-
PUT R 10
-
PUT B 10
-
PUT B 10
-
GET
-
範例輸出
-
R 10
用棧實現即可
#include <stdio.h>main(){int number,te;int op;int i;int j; char temp;int n;int up;char b[1000];int a[1000];scanf("%d",&number);for(te=1;te<=number;te++){up=0;scanf("%d",&op);for(i=0;i<op;i++){ getchar();scanf("%c",&temp);if(temp=='P'){for(j=0;j<3;j++)scanf("%c",&temp);scanf("%c",&temp);scanf("%d",&n);if(up==0){ a[up]=n; b[up]=temp; up++;}else{if(b[up-1]==temp)a[up-1]+=n;else{ a[up]=n; b[up]=temp; up++;} }}if(temp=='G'){printf("%c %d\n",b[0],a[0]);for(j=0;j<up-1;j++){a[j]=a[j+1];b[j]=b[j+1];up--;}}}}}