zoukankan      html  css  js  c++  java
  • 从群里抄来的某题

    题意:

    你一开始有INF元,已知某股票n天的价格,你每天可以买1支股票,卖一支股票,不操作。问n天后你最多盈利多少。

    解:

    搞一个小根堆。

    每天的股价都往里面扔两次,然后取当天价格 - 堆顶即为当天盈利。

    堆中的数值意味着可能购买这个价的股票。

    出堆意味着买 + 卖。

    可以把不操作看成买1卖1,把买看成买2卖1,这样每天都要卖。

    这样,①如果堆顶是今天,表明之前不可能买到更低价的股票,所以今天不卖。

    入堆的那一次表明今天买的可能性。

    ②如果堆顶是之前某天,表明今天卖那一支。

    入堆两次表明今天买的可能性与把卖的那支买回来的可能性(不卖)。

    这样,等后者出堆时,实际上是把之前那一支拖到后面卖,而盈利分开计算,也就是所谓的反悔,退流操作。(费用分开计算?)

     1 #include <cstdio>
     2 #include <queue>
     3 
     4 std::priority_queue<double, std::vector<double>, std::greater<double> > Q;
     5 
     6 int main() {
     7     int n;
     8     double x, ans = 0.0;
     9     scanf("%d", &n);
    10     for(int i = 1; i <= n; i++) {
    11         scanf("%lf", &x);
    12         Q.push(x);
    13         Q.push(x);
    14         ans += x - Q.top();
    15         Q.pop();
    16     }
    17 
    18     printf("%.0lf
    ", ans);
    19     /*while(!Q.empty()) {
    20         Q.pop();
    21     }
    22     main();*/
    23     return 0;
    24 }
    代码如下
  • 相关阅读:
    JZOJ 5728. 简单计数|| (容斥+动态规划)
    6638. 【GDOI2020.5.16模拟】Seat (队列)
    JZOJ 5750. 青青草原播种计划 (小性质+线段树)
    JZOJ 5753. 完全二叉树 (可持久化线段树维护hash值)
    JS框架-React.js
    flexbox弹性盒子布局
    压缩js和css文件的原理
    JS判断数据类型的方式
    JS数据类型
    ES6新特性
  • 原文地址:https://www.cnblogs.com/huyufeifei/p/9552069.html
Copyright © 2011-2022 走看看