hi hi hi,又见面啦!
本篇文章为大家带来一道关于“栈”的题………………
废话不多说(废话),请看。
文章目录
-
- 描述
- 输入
- 输出
- 样例输入
- 样例输出
描述
小谢虽然有很多溶液,但是还是没有办法配成想要的溶液,因为万一倒错了就没有办法挽回了。因此,小谢到网上下载了一个溶液配置模拟器。模拟器在计算机中构造一种虚拟溶液,然后可以虚拟地向当前虚拟溶液中加入一定浓度、一定体积的这种溶液,模拟器会快速地算出倒入后虚拟溶液的浓度和体积。模拟器里一单位体积等于一单位质量。当然,如果倒错了可以撤销。模拟器的使用步骤如下:1)为模拟器设置一个初始体积和浓度 V0、C0%。2)进行一系列操作,模拟器支持两种操作:P(v,c)操作:表示向当前的虚拟溶液中加入体积为 v 浓度为 c 的溶液;Z 操作:撤销上一步的 P 操作。
输入
第一行两个整数,表示 V0 和 C0,0≤C0≤100;第二行一个整数 n,表示操作数,n≤10000;接下来 n 行,每行一条操作,格式为:P_v_c 或 Z。其中 _ 代表一个空格,当只剩初始溶液的时候,再撤销就没有用了。 任意时刻质量不会超过231−1231−1。
输出
n 行,每行两个数 Vi,Ci,其中 Vi 为整数,Ci 为实数(保留 5 位小数)。 其中,第 i 行表示第 i 次操作以后的溶液体积和浓度。
样例输入
100 100 2 P 100 0 Z
样例输出
200 50.00000 100 100.00000
代码
#include <iostream>
#include <iomanip>
using namespace std;struct ry{
int v;
double c;
}s[10005];
int top = 1, v1, n;
double c1;
char ch;int main(){
cin >> s[top].v >> s[top].c >> n;
for(int i = 1; i <= n; i++){
cin >> ch;
if(ch == 'P'){
cin >> v1 >> c1;
s[top + 1].v = s[top].v + v1;
s[top + 1].c = (s[top].v * s[top].c + v1 * c1) / s[top + 1].v;
top++;
}else if(ch == 'Z' && top > 1){
top--;
}
cout << fixed << setprecision(5);
cout << s[top].v << " " << s[top].c << endl;
}
return 0;
}
小结
本题用数组模拟实现了栈,但真正意义上来说,这个代码与栈基本无关,栈只是一个数据结构,而所有的数据结构都可以用数组来模拟。