社区讨论
哪错了???
学术版参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi7yjv2y
- 此快照首次捕获于
- 2025/11/21 05:43 4 个月前
- 此快照最后确认于
- 2025/11/21 05:43 4 个月前
题目如下
CPP5、溶液模拟器(simulator,1s,256MB)
【问题描述】
小谢虽然有很多溶液,但是还是没有办法配成想要的溶液,因为万一倒错了就没有办法挽回了。因此,小谢到网上下载了一个溶液配置模拟器。模拟器在计算机中构造一种虚拟溶液,然后可以虚拟地向当前虚拟溶液中加入一定浓度、一定体积的这种溶液,模拟器会快速地算出倒入后虚拟溶液的浓度和体积。当然,如果倒错了可以撤销。
模拟器的使用步骤如下:
1)为模拟器设置一个初始体积和浓度 V0、C0%。
2)进行一系列操作,模拟器支持两种操作:
P(v,c)操作:表示向当前的虚拟溶液中加入体积为v 浓度为 c 的溶液;
Z 操作:撤销上一步的 P 操作。
【输入格式】
第一行两个整数,表示 V0 和 C0,0≤C0≤100;
第二行一个整数 n,表示操作数,n≤10000;
接下来 n 行,每行一条操作,格式为:P_v_c 或 Z。
其中 _ 代表一个空格,当只剩初始溶液的时候,再撤销就没有用了。
任意时刻质量不会超过 2^31 -1。
【输出格式】
n 行,每行两个数 Vi,Ci,其中 Vi 为整数,Ci 为实数(保留 5 位小数)。
其中,第 i 行表示第 i 次操作以后的溶液体积和浓度。
【输入样例】
100 100
2
P 100 0
Z
【输出样例】
200 50.00000
100 100.00000
#include<bits/stdc++.h>
#define ll long long
#define ri register int
using namespace std;
int v, n, top;
double c;
struct kyc{
int ck;
double vk;
}Stack[10010];
int main() {
//freopen("simulator.in","r",stdin);
//freopen("simulator.out","w",stdout);
cin >> Stack[++top].vk >> Stack[top].ck >> n;
for(ri i = 1; i <= n; ++ i) {
char c;
cin >> c;
if(c == 'Z' && top > 1) --top;
if(c == 'P') {
cin >> v >> c;
Stack[++ top].vk = Stack[top - 1].vk + v;
Stack[top].ck = (Stack[top - 1].vk * Stack[top - 1].ck + v * c)/(double)Stack[top].vk;
}
cout << Stack[top].vk << " " ;
cout << fixed << setprecision(5) << Stack[top].ck << endl;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...