题目描述
小Y太失败了,他虽然在化学实验课中偷来了很多溶液,但是还是没有办法配成想要的溶液,万一倒错了就没有办法挽回了,小A迟迟不敢下手。
好在天才就是天才。
小Y到网上下载了一个溶液配置模拟器。溶液配置模拟器是这样的程序:模拟器在电脑中构造一种虚拟溶液,然后你可以虚拟地向当前虚拟溶液中加入一定浓度一定质量的这种溶液,模拟器会快速地算出倒入后虚拟溶液的浓度和质量。当然,计算机最可爱的地方就是当你倒错了可以撤销。
模拟器的使用步骤是这样的:
1.为模拟器设置一个初始质量和浓度V0,C0%(0≤C0≤100)。
2.进行一系列操作,模拟器支持两种操作:
P(v,c)操作:表示向当前的虚拟溶液中加入质量为v浓度为c的溶液;
Z操作:撤销上一步P操作。
但是„„小A不小心把模拟器弄丢了„„眼看论文答辩迫在眉睫,小Y只能依靠你了。
输入
第一行,两个整数VO,CO。
第二行,一个整数N,表示操作数;
接下来N行,每行一条操作,格式为:P_v_c或Z(P,Z都是大写字母)。其中“_”代表一个空格,当只剩初始溶液的时候,再撤销就没有用了;任意时刻质量不会超过231-1。
输出
N行,每行两个数Vi,Ci,其中Vi为整数,Ci为实数(保留5位小数),之间用一个空格隔开。其中,第i行表示第i次操作以后的溶液质量和浓度。
样例输入Copy
100 100
2
P 100 0
Z
样例输出Copy
200 50.00000
100 100.00000
#include<iostream>
#include<iomanip>
using namespace std
;
struct node
{
int v
;
double c
;
}a
[10001];
int main(){
int v
,c
,n
,top
=1;
cin
>>v
>>c
>>n
;
a
[top
].v
=v
;
a
[top
].c
=c
;
while(n
--){
char ch
;
cin
>>ch
;
if(ch
=='Z'&&top
>1){
top
--;
}
if(ch
=='P'){
cin
>>v
>>c
;
top
++;
a
[top
].v
=a
[top
-1].v
+v
;
a
[top
].c
=(a
[top
-1].v
*a
[top
-1].c
+v
*c
)/(double)a
[top
].v
;
}
cout
<<fixed
<<setprecision(5)<<a
[top
].v
<<" "<<a
[top
].c
<<endl
;
}
}