目录

2020计蒜之道预赛第二场-群星

题目描述

蒜头君是一个 P 社玩家,每天从计蒜客下班回家之后的第一件事情就是打开《群星》,开始继续他的第四天灾之旅。这次他把注意力集中到了银河市场里面。

银河市场里面商品的价格都通过以下公式计算:

P = B * basePrice / S

price = \displaystyle \frac{buy}{sell} * basePriceprice= sell buy ​ ∗basePrice

其中 priceprice 是某个商品现在的单位价格,sellsell 是该商品目前所有玩家在银河市场的总出售量, buy 是该商品目前所有玩家在银河市场的总购买量(buy 或 sell 为 0 的时候在公式里面均被视为 1),basePrice 是该商品的起始单位价格。

可是暗物质并不适用这条规则,因为蒜头君垄断了整个银河系的暗物质生产,并决定让暗物质的价格和合金在银河市场里面的价格挂钩,即暗物质的 单位价格 和合金 单位价格 的 比值 是一直不变的。

现在蒜头君手上有银河市场里面合金的完整交易数据、合金与暗物质各自的起始价格,现在蒜头君需要知道每一次合金交易之后暗物质当前的单价应该是多少。

输入格式 第一行有三个实数 a(为 alloy 的简写)和 dmdm(为 dark matter 的简写),为合金和暗物质的初始单位价格,和一个整数 n 表示蒜头君手上拿到的合金交易次数。

往后 n 行每一行输入一个实数 x:

如果为正数,表示这次交易是某个玩家从银河市场购买了合金,且购买的量是 x 单位。 如果为负数,表示这次交易是某个玩家向银河市场出售了合金,且出售的量是 −x 单位。 数据约定 1\le n \le 100001≤n≤10000,0<a,dm\le100000<a,dm≤10000,0<|x|\le100000<∣x∣≤10000。

输出格式 输出总共有 nn 行,每一行表示每一次合金交易之后暗物质的单价是多少,你的答案和标准答案的误差不能超过 10^{-3}10 −3 。

如果你觉得题意比较难理解,可以再认真看一看样例数据和样例解释。

示例

  • 示例 1:

    输入

    1
    2
    3
    4
    
    3.2 16 3
    1.5
    -6
    16.5
    

    输出

    1
    2
    3
    
    24.000
    4.000
    48.000
    

    样例解释

     银河市场建立的时候,合金和暗物质的单价分别为 3.2 和 16。
    
     第一次交易,某个玩家从银河市场中买走了 1.5 单位合金,此时暗物质的单价为 16\times 1.5/1= 24 16×1.5/1=24。
    
     第二次交易,某个玩家向银河市场中出售了 6 单位合金,此时暗物质的单价为 16\times 1.5/6= 41 6×1.5/6=4。
    
     第三次交易,某个玩家从银河市场中买走了 16.5单位合金,此时暗物质的单价为 16\times (1.5+16.5)/6= 48 16×(1.5+16.5)/6=48。
    

  • 解题思路

    很简单的模拟题, 题目描述会让人困惑, 通过样例倒是很容易理解。

  • 题解1:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
       a = input().split()
       bp = float(a[1])
       num = int(a[2])
       input_line = []
       result = []
       for x in range(int(num)):
           input_line.append(input())
       # 处理逻辑
       sell = 0.0
       buy = 0.0
       for index, x in enumerate(input_line):
           x = float(x)
           sell = sell if sell != 0 else 1.0
           buy = buy if buy != 0 else 1.0
           if x > 0:
              buy = buy + x if buy != 1.0 else x
           if x < 0:
              sell = sell + abs(x) if sell != 1.0 else abs(x)
           dm_price = bp * (buy / sell)
           result.append(dm_price)
       # 输出结果
       for x in result:
           print(x)