问题描述

某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量。
  该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种:
  1. buy p s 表示一个购买股票的买单,每手出价为p,购买股数为s。
  2. sell p s 表示一个出售股票的卖单,每手出价为p,出售股数为s。
  3. cancel i表示撤销第i行的记录。
  如果开盘价为p0,则系统可以将所有出价至少为p0的买单和所有出价至多为p0的卖单进行匹配。因此,此时的开盘成交量为出价至少为p0的买单的总股数和所有出价至多为p0的卖单的总股数之间的较小值。
  你的程序需要确定一个开盘价,使得开盘成交量尽可能地大。如果有多个符合条件的开盘价,你的程序应当输出最高的那一个。
输入格式
  输入数据有任意多行,每一行是一条记录。保证输入合法。股数为不超过108的正整数,出价为精确到恰好小数点后两位的正实数,且不超过10000.00。
输出格式
  你需要输出一行,包含两个数,以一个空格分隔。第一个数是开盘价,第二个是此开盘价下的成交量。开盘价需要精确到小数点后恰好两位。
样例输入
buy 9.25 100
buy 8.88 175
sell 9.00 1000
buy 9.00 400
sell 8.92 400
cancel 1
buy 100.00 50
样例输出
9.00 450
评测用例规模与约定
  对于100%的数据,输入的行数不超过5000。


集合竞价产生开盘价价格的方法是:
一、交易系统按照价格优先和时间优先原则,对所有有效的买单按申报价由高到低排列,对所有有 效的卖单按申报价由低到高排列。
二、交易系统依次将排在队列前面的买单和卖单配对成交,直到不能成交为止。
三、如果最后一笔成交是完全成交,即买单数量与卖单数量相等,则取最后一笔成交的买入申报价和卖出申报价的算术平均价为开盘价;如果最后一笔成交是部分成交,则取部分成交的定单申报价为开盘价。该价格按期货合约的最小变动价位取整。
四、如果没有成交,则以集合竞价后的第一笔成交价为开盘价。


我读题时一直在纠结开盘价是不是从给出的所有价格中产生。。要是所有数字都可以的话,这个问题就相当的复杂了。。。

这里用set还是很好用,默认从小到大排序,而且去重,非常有利于我们筛选出使成交量最大的开盘价。注意遍历时的写法:for(set::iterator it=s.begain();it!=s.end();it++)

暴力求解,主要思路即为从小到大排出所有价格,分别求出成交量,标记最大值。
求最大成交量的简化:min(所有可以卖的量之和,所有可以买的量之和)。


#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
#include<algorithm>
#include<set>
#include<windows.h>
using namespace std;struct Share
{string type;double p;int s;int isCancel;
};
struct Share share[5005];
int main()
{int i;char type[8];int n = 1;set<double> price;string a;while (cin >> share[n].type){if (share[n].type == "cancel"){int pos;scanf("%d", &pos);share[pos].isCancel = 1;n++;continue;}else if (share[n].type == "buy" || share[n].type == "sell"){cin >> share[n].p >> share[n].s;n++;}else break;}for (i = 1; i < n; i++){if (!share[i].isCancel && share[n].type != "cancel")price.insert(share[i].p);}long long int maxDealNum = 0;double openPrice = 0;for (set<double>::iterator it = price.begin(); it != price.end(); it++){double p0 = *it;long long buyNum, sellNum, dealNum;buyNum = sellNum = 0;for (i = 1; i < n; i++){if (!share[i].isCancel && share[i].type == "buy" && share[i].p >= p0){buyNum += share[i].s;}if (!share[i].isCancel && share[i].type == "sell" && share[i].p <= p0){sellNum += share[i].s;}}dealNum = min(buyNum, sellNum);if (dealNum >= maxDealNum){maxDealNum = dealNum;openPrice = p0;}}printf("%.2lf %I64d\n", openPrice, maxDealNum);return 0;
}

ccf201412-3集合竞价相关推荐

  1. CCF201412-3 集合竞价(100分)

    试题编号: 201412-3 试题名称: 集合竞价 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘 ...

  2. system.objectdisposedexception: 已释放该集合_“开盘10分钟”才是黄金时间——集合竞价“9:15-9:25”预知涨跌,万本股票书籍不及此精华!...

    (本文由公众号越声攻略(yslc688)整理,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负.) 集合竞价就是指在每个交易日上午9:15--9:25,由投资者按照自己所能接受的心理价格自 ...

  3. 集合竞价如何买入_集合竞价的那些事:开盘涨停,这样做你也能抢到!

    记得周四和周五很多人问汪哥,那么多股前一天都没反应,但是第二天开盘就已经涨停了,完全不明所以.... 因为很多股友习惯在9:30分以后才打开行情软件,开始一天的操作,殊不知,真正的较量,在9:15.甚 ...

  4. strcpy会覆盖原来的吗_你真的会挂单吗?原来“集合竞价”10分钟竟然隐藏这么多秘密,看懂这些细节,直接精准判整日走势...

    (本文由公众号越声投顾(yslcw927))整理,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负.) 什么是集合竞价? 所谓集合竞价就是在当天还没有成交价的时候,你可根据前一天的收盘价和 ...

  5. 集合竞价如何买入_世界上最稳健的抓涨停方法“10分钟集合竞价”选股诀窍,买入直接稳赚10个点,赚到笑...

    (本文由公众号越声擒牛(ysjfh953))整理,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负.) 优先: 1.有新闻主题股.消息优先 2.当前热炒股优先(如新闻消息,如低价的,高转送 ...

  6. CCF201412试题

    来源:CCF计算机职业资格网站. 试题编号: 201412-1 试题名称: 门禁系统 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 涛涛最近要负责图书馆的管理工作,需要记录下 ...

  7. php判断股票涨停,竞价预期战法:涨停板次日集合竞价图是否符合预期的短线判断技术(图解)...

    要搞懂集合竞价,首先我们还是看看百度出来给我们的解释. 集合竞价是指对一段时间内接收的买卖申报一次性集中撮合的竞价方式.以我国竞价交易制度为例,集合竞价时成交价格的确定原则是: 1.在有效价格范围内选 ...

  8. 终于有人把股市集合竞价的秘密说清楚了

    http://blog.sina.com.cn/s/blog_6b492ddd0102vn6s.html 1.9:15--9:20这五分钟开放式集合竞价可以委托买进和卖出的单子,你看到的匹配成交量可能 ...

  9. python ccf题解 201412-3 集合竞价

    问题描述 试题编号: 201412-3 试题名称: 集合竞价 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定 ...

  10. 股票投资 - 如何看懂集合竞价

    文章目录 股票投资 - 如何看懂集合竞价 1.集合竞价的基本交易规则 2.集合竞价图全面解析 股票投资 - 如何看懂集合竞价 1.集合竞价的基本交易规则 开盘竞价 9.15-9.20 可以挂可以撤 9 ...

最新文章

  1. Selenium2+Python自动化-处理浏览器弹窗(转载)
  2. [导入]LINQ体验(11)——LINQ to SQL语句之Null语义和String/DateTime方法
  3. MyEclipse创建struts.xml
  4. 软件测试个人心得总结
  5. linux的vi把文件合并一行,学习Vim合并行的方法和技巧
  6. Delphi开发中增删改查操作以及存储过程的调用方式
  7. 米粉期盼小米Civi推Pro版本:搭载骁龙870旗舰芯片
  8. 活动推荐 | AWS 技术峰会,AI分论坛集齐各路业界大牛,免费开放参与
  9. 互联网技术2007热点技术
  10. Java 服务器端支持断点续传的源代码
  11. C++ 已知两点坐标和半径求圆心坐标程序
  12. 【Android】 NDK开发中JNI配置及调用GPIO
  13. 微信小程序tab切换效果
  14. 调用有道智云api做翻译器遇到播放音频的问题
  15. 游戏加加导致cpu降频
  16. DRS是啥你都不知道?不是吧,不是吧
  17. excel数据处理_有没有可以完全替代并超越excel的表格和数据处理软件?
  18. 前端使用AudioContent左右声道切换
  19. python ui框架哪个最好用_Python UI开发最常用到的库
  20. LABVIEW 虚拟键盘 触摸键盘 中英文输入 支持WIN10 WIN7

热门文章

  1. 凝思Linux6.0.60安装卸载NVIDIA显卡驱动
  2. 苹果mp3软件_学文案一代神器iPod的16年兴衰——苹果广告40年
  3. 油菜花系统服务器能删除内容吗,油菜花花期怎样管理,油菜花花期管理技术要点...
  4. 电视台‘自制好剧’,大量剧本从何来?
  5. [论文解读 IJCAI 19] LogAnomaly Unsupervised Detection of Sequential and Quantitative Anomalies
  6. 什么是数字孪生?把这篇文章看完你就能秒懂
  7. 修复iPhone白苹果
  8. python怎么测试一个网站的延迟_Python检测网络延迟的代码
  9. IMDB电影排行爬取分析
  10. C++ protected 解析