结构体与栈——nefu oj 1627

小谢虽然有很多溶液,但是还是没有办法配成想要的溶液,因为万一倒错了就没有办法挽回了。因此,小谢到网上下载了一个溶液配置模拟器。模拟器在计算机中构造一种虚拟溶液,然后可以虚拟地向当前虚拟溶液中加入一定浓度、一定体积的这种溶液,模拟器会快速地算出倒入后虚拟溶液的浓度和体积。当然,如果倒错了可以撤销。
模拟器的使用步骤如下:
1)为模拟器设置一个初始体积和浓度 V0、C0%。
2)进行一系列操作,模拟器支持两种操作:
P(v,c)操作:表示向当前的虚拟溶液中加入体积为 v 浓度为 c 的溶液;
Z 操作:撤销上一步的 P 操作。

Input

第一行两个整数,表示 V0 和 C0,0≤C0≤100;
第二行一个整数 n,表示操作数,n≤10000;
接下来 n 行,每行一条操作,格式为:P_v_c 或 Z。
其中 _ 代表一个空格,当只剩初始溶液的时候,再撤销就没有用了,这时只输出初始的体积和浓度。
任意时刻质量不会超过 2^31 -1。

Output

n 行,每行两个数 Vi,Ci,其中 Vi 为整数,Ci 为实数(保留 5 位小数)。
其中,第 i 行表示第 i 次操作以后的溶液体积和浓度。

Sample Input

100 100
2
P 100 0
Z

Sample Output

200 50.00000
100 100.00000

answer:

#include <bits/stdc++.h>
using namespace std;

typedef struct
{
    int v;
    double c;
}liquid;

stack<liquid>vis;

int main()
{
    int n,v0,v1,v2,v3,v4;
    double c0,c1,c2,c3,c4;
    char operate;
    ios::sync_with_stdio(false);//减少输入时间;
    cin>>v0>>c0>>n;
    vis.push({v0,c0});//注意结构体入栈;
    while(n--)
    {
        cin>>operate;
        if(operate=='P')
        {
            cin>>v2>>c2;
            v1=vis.top().v;//栈中结构体元素的获得;
            c1=vis.top().c;
            v3=v1+v2;
            c3=(v1*c1+v2*c2)/v3;
            printf("%d %.5lf\n",v3,c3);
            vis.push({v3,c3});
        }
        if(operate=='Z')
        {
            if(vis.size()==1)//初始溶液情况
            printf("%d %.5lf\n",v0,c0);
            else
            {
                vis.pop();
                v4=vis.top().v;
                c4=vis.top().c;
                printf("%d %.5lf\n",v4,c4);
            }
        }
    }
    return 0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值