问题描述

  某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量。
  该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种:
  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。


本题对于cancel的描述是及其不充足的,具体规则如下:

  • cancel取消不了另一个cancel行命令
  • 作用于同一行的两个cancel命令相互抵消,即相当于恢复原状态

因这条规则不明确导致辗转反侧,故写在这里留给以后刷题的孩子。

另,如果buy相同金额多次,我按照相加处理,是100分。


#include <iostream>
#include <string>
#include <cstdio>
#include <math.h>
#include <string.h>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
#include <set>
#include <sstream>
#include <iomanip>
using namespace std;
map<double,long long> buy;
map<double,long long> sell;
int main()
{vector<string> v;string s;while(getline(cin,s)){v.push_back(s);}for(int i=v.size()-1;i>=0;--i){if(v[i][0]=='c'){istringstream is(v[i]);string q;int a;is>>q>>a;if(v[a-1][0]=='u'){if(v[a-1][1]=='u')v[a-1][0]='b';if(v[a-1][1]=='e')v[a-1][0]='s';}else if(v[a-1][0]=='c');elsev[a-1][0]='u';}else if(v[i][0]=='b'){istringstream is(v[i]);string q;int b;double a;is>>q>>a>>b;if(buy.find(a)==buy.end())buy[a]=b;elsebuy[a]+=b;}else if(v[i][0]=='s'){istringstream is(v[i]);string q;int b;double a;is>>q>>a>>b;if(sell.find(a)==sell.end())sell[a]=b;elsesell[a]+=b;}}double price;long long sum=0,psum;for(map<double,long long>::iterator iter=buy.begin();iter!=buy.end();++iter)sum+=iter->second;map<double,long long>::iterator ibuy=buy.begin();map<double,long long>::iterator isell=sell.begin();long long sumbuy=sum,sumsell=0,sumtotal=0;double ansprice;while(ibuy!=buy.end()&&isell!=sell.end()){if(ibuy->first<isell->first){price=ibuy->first;if(min(sumsell,sumbuy)>=sumtotal){sumtotal=min(sumsell,sumbuy);ansprice=ibuy->first;}sumbuy-=ibuy->second;++ibuy;}else if(ibuy->first>isell->first){price=isell->first;sumsell+=isell->second;if(min(sumsell,sumbuy)>=sumtotal){sumtotal=min(sumsell,sumbuy);ansprice=isell->first;}++isell;}else{price=ibuy->first;sumsell+=isell->second;if(min(sumsell,sumbuy)>=sumtotal){sumtotal=min(sumsell,sumbuy);ansprice=isell->first;}sumbuy-=ibuy->second;++isell;++ibuy;}}while(ibuy!=buy.end()){price=ibuy->first;if(min(sumsell,sumbuy)>=sumtotal){sumtotal=min(sumsell,sumbuy);ansprice=ibuy->first;}sumbuy-=ibuy->second;++ibuy;}while(isell!=sell.end()){price=isell->first;sumsell+=isell->second;if(min(sumsell,sumbuy)>=sumtotal){sumtotal=min(sumsell,sumbuy);ansprice=isell->first;}++isell;}cout<< fixed << setprecision(2)<<ansprice<<" "<<sumtotal;return 0;
}

CCF计算机软件能力认证 C++ 集合竞价相关推荐

  1. ccf z字形 java_第三次CCF计算机软件能力认证题目:Z字形扫描

    这是第三次CCF计算机软件能力认证考试(2014年12月14日)的一道题目.小编今天有幸免费参加了这次考试.据说这题是谷歌的笔试题变形??求证实.. 好了,题外话不啰嗦,看题目 题目 在图像编码的算法 ...

  2. [ 2019-12-15第十八次CCF计算机软件能力认证]总结 Apare_xzc

    [ 2019-12-15第十八次CCF计算机软件能力认证]总结 导言:今天第一次参加CCF考试,考完回来迫不及待地想要做一点笔记 链接:我做的CCF题目汇总Apare_xzc <– 比赛题目(凭 ...

  3. CCF计算机软件能力认证201809-2买菜(C语言版)

    ccf-csp计算机软件能力认证201809-2买菜(C语言版) 题目内容: 问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车, ...

  4. CCF计算机软件能力认证202009-1称检测点查询(C语言版)

    ccf-csp计算机软件能力认证202009-1称检测点查询(C语言版) 题目内容: 题目背景 2020 年 6 月 8 日,国务院联防联控机制发布<关于加快推进新冠病毒核酸检测的实施意见> ...

  5. 【竞赛题解】第22次CCF计算机软件能力认证 B

    今天(准确说是昨天,一下子就过12点了)下午刚参加了CSP认证考试,大概是考了220(前两题AC,第三题太折磨了懒得看了,后面两题各混了10分),唯一有点参与感的就是B题了,于是这里分析下我的B题思路 ...

  6. CCF计算机软件能力认证试题练习:201903-1 小中大

    小中大 来源:CCF 标签: 参考资料: 相似题目: 背景 在数据分析中,最小值最大值以及中位数是常用的统计信息. 题目 老师给了你 n 个整数组成的测量数据,保证有序(可能为升序或降序),可能存在重 ...

  7. CCF计算机软件能力认证试题练习:201803-2 碰撞的小球

    碰撞的小球 来源:CCF 标签: 参考资料: 相似题目: 题目 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上, ...

  8. CCF计算机软件能力认证试题练习:201809-2 买菜

    买菜 来源:CCF 标签: 参考资料: 相似题目: 题目 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装 ...

  9. CCF计算机软件能力认证试题练习:201909-2 小明种苹果(续)

    小明种苹果(续) 来源:CCF 标签: 参考资料: 相似题目: 题目 小明在他的果园里种了一些苹果树,这些苹果树排列成一个圆.为了保证苹果的品质,在种植过程中要进行疏果操作.为了更及时地完成疏果操作, ...

最新文章

  1. 2019学习Python的10个原因
  2. linux物理内存虚拟内存一致,Liunx内存管理的调用和实现
  3. 十六、Javascript实现放大镜效果
  4. 支付宝招兼职“找茬程序员” 不用坐班/最高奖励36万
  5. 【半译】在ASP.NET Core中创建内部使用作用域服务的Quartz.NET宿主服务
  6. NetBeans 7.4 Beta提示警告无效的异常处理
  7. SpriteBuilder物理对象的父子关系
  8. oracle先执行哪个from,Oracle(二)SELECT语句执行顺序
  9. Optimizing regular expressions in Java
  10. 201521123062《Java程序设计》第10周学习总结
  11. maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
  12. js判断undefined nan等
  13. MySQL 8.0.27 下载、安装与配置 超详细教程(Windows64位)
  14. 阿里云上构建php mysql_手把手教你如何在阿里云服务器上搭建PHP环境?
  15. 向gitlab推送push时报nullSha1: contains entries pointing to null sha1
  16. 爱普生EPSON实时时钟芯片-RX8900SA
  17. java开发工程师转正述职报告
  18. 尚品汇前端每日跟练笔记
  19. 手机c语言多文件编程,C语言多文件编程
  20. Python实现人脸口罩检测!这玩意太强大了啊!

热门文章

  1. 基于微信小程序的学生选课系统源码
  2. jqyery第四章上级训练一
  3. 蚂蚁金服上市了,我不想努力了
  4. iOS 疑难杂症 学习笔记
  5. 上半年结束,46万家公司倒闭,2024太难了!
  6. 通过电影票房预测来一览机器学习一般流程
  7. 爬山虎采集实战-站长之家网站排行榜
  8. 网上报名上传电子照片时,要求大于30K小于200K,该怎么修改?...
  9. jquery设置背景图片:$(this).css(background-image,url(on.jpg));就可以了
  10. bigemap地图源?