C++信息学奥赛溶液模拟器正解
时间: 2023-12-13 20:04:38 浏览: 50
以下是C++信息学奥赛溶液模拟器正解的代码和解释:
```cpp
#include <bits/stdc++.h>
using namespace std;
long long a[1005]; //质量
double b[1005]; //浓度
long long top, v, c, n, v1, c1;
int main() {
cin >> v >> c >> n;
a[top] = v;
b[top] = c;
char s;
while (n--) {
cin >> s;
if (s == 'P') {
cin >> v1 >> c1;
top++;
a[top] = a[top - 1] + v1;
b[top] = (a[top - 1] * b[top - 1] + v1 * c1) * 1.0 / (a[top]);
} else if (top > 0) {
top--;
}
printf("%lld %.5lf\n", a[top], b[top]);
}
return 0;
}
```
这段代码实现了一个溶液模拟器,可以模拟加入和取出溶液的过程,并计算出每次操作后的溶液质量和浓度。具体来说,代码中使用了一个栈来存储每次操作后的溶液质量和浓度,栈顶元素即为当前溶液的状态。每次加入溶液时,将新的溶液质量和浓度计算出来并压入栈中;每次取出溶液时,将栈顶元素弹出即可。最后,输出栈顶元素即为当前溶液的状态。