CCF 集合竞价
题目:
该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种:
1. buy p s 表示一个购买股票的买单,每手出价为p,购买股数为s。
2. sell p s 表示一个出售股票的卖单,每手出价为p,出售股数为s。
3. cancel i表示撤销第i行的记录。
如果开盘价为p0,则系统可以将所有出价至少为p0的买单和所有出价至多为p0的卖单进行匹配。因此,此时的开盘成交量为出价至少为p0的买单的总股数和所有出价至多为p0的卖单的总股数之间的较小值。
你的程序需要确定一个开盘价,使得开盘成交量尽可能地大。如果有多个符合条件的开盘价,你的程序应当输出最高的那一个。
buy 8.88 175
sell 9.00 1000
buy 9.00 400
sell 8.92 400
cancel 1
buy 100.00 50
思路:
关键是对p0的选取,这里p0一定是有效的买单或卖单里的p。
理由:
若p0不是买单或卖单里的p,那么p0必然介于某两个出价p之间,设为 p1 和 p2,即 p1 < p0 < p2;
1.当买单和卖单里都有p2时,这时若以p0为单价,则必然会使卖单减少,由于成交量是取小的,所以成交量也会减小,就不如开盘价为p2是的好;
2.当只有买单有p2,和开盘价为p2时一样,所以开盘价不会是这个p0;
3.当只有卖单有p2,情况和 1 相同;
4.当买单和卖单里都有p1时或只有买单有p1时,若以p0为单价,则会使买单减少,继而成交量减小,不如开盘价为p1;
5.当只有卖单有p1时,这时和开盘价为p1时是一样的,此时p0优于p1,但是p2则必然优于p0;由于买单是没有p1,所以此时对于p1,p0,p2买单的成交量都一样,而 卖单的成交量p1和p0相同,p2则大于等于p1和p0;
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
#define MAX 5007
typedef struct{
string m;
double p;
int s;
bool e;
}R;
R r[MAX];
set<double> st;
int main(){
/*
这里的每一条记录都需要记录,包括cancel i,
因为cancel i 是在包含cancel i这条记录的情况的的第i条记录
*/
int m=;
while(cin>>r[m].m){
if(r[m].m == "cancel"){
cin>>r[m].s;
r[r[m].s-].e=true;
m++;
continue;
}
cin>>r[m].p>>r[m].s;
++m;
}
for(int i=;i<m;++i)
if(r[i].m != "cancel" && !r[i].e)st.insert(r[i].p); ll m_sum=;
double p=;
for(set<double>::iterator it=st.begin();it!=st.end();++it){
double p0 = *it;
ll sumb=,sums=,sum;
for(int i=;i<m;++i)
if(r[i].m == "sell" && !r[i].e && r[i].p<=p0)sums+=r[i].s;
for(int i=;i<m;++i)
if(r[i].m == "buy" && !r[i].e && r[i].p>=p0)sumb+=r[i].s;
sum=min(sums,sumb); if(sum>=m_sum){
m_sum=sum;
p=p0;
}
}
//注意保留到小数点后两位
printf("%.2f ",p);
cout<<m_sum<<endl;
return ;
}
CCF 集合竞价的更多相关文章
- ccf集合竞价
我不懂为什么是错误.然后零分.贴出测试. 然后即使注释掉while循环中的break部分,也是如此. #include<iostream> #include<iomanip> ...
- CCF CSP 201412-3 集合竞价
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201412-3 集合竞价 问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确 ...
- CCF计算机职业资格认证考试题解
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF计算机职业资格认证考试题解 CCF计算机软件能力认证(简称CCF CSP认证)是CCF计算机职业资格认证系 ...
- CCF认证历年试题
CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...
- CCF考试
第八次CCF考试记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四题的代码 第 ...
- CCF关于NOIP2014复赛报名的通知
CCF关于NOIP2014复赛报名的通知 CCF NOIP2014复赛全部实行网上注册.报名.未通过网上报名的选手将不具备参赛和申诉资格. 系统注册须知: NOIP2014复赛注册时间:2014年 ...
- [CCF] Z字形扫描
CCF Z字形扫描 感觉和LeetCode中的ZigZag还是有一些不一样的. 题目描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z ...
- [CCF] ISBN号码检测
CCF ISBN号码检测 题目概述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如"x-xxx-xxxxx-x",其 ...
- CCF NOI系列活动
NOI-全国青少年信息学奥林匹克竞赛全国青少年信息学奥林匹克竞赛(NOI)是国内信息学领域内面向中学生的最高水平的大赛,每省派经选拔产生的选手(其中一名是女选手)参加,NOI每年在不同的省市举行. N ...
随机推荐
- Testng中注释简介
1. @Before和@After 注释 这两个就比较多,一般用于在测试构件上.关于测试构件以后详细介绍,测试构件一般有测试之前的操作和测试运行之后的清除数据的操作. Before分类有@Before ...
- HIVE学习(待更新)
1 安装hive 下载 http://mirrors.shu.edu.cn/apache/hive/hive-1.2.2/,红框中的不需要编译. 由于hive是默认将元数据保存在本地内嵌的 Derby ...
- wireshark初学者使用
介绍 Wireshark是一款网络封包分析软件,截取网络封包,显示其封包的详细信息.日常工作中用的比较多.在使用wireshark之前须了解常用的网络协议.如:tcp,http,ip,udp等.(其实 ...
- HDU-4714-贪心
Tree2cycle Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Tot ...
- centos7 配置 NFS mount挂载服务器
1. NFS服务端 安装NFS服务 yum install nfs_utils yum install rpcbind (系统默认已经有了,可查看下) 配置共享文件夹 1. 创建文件夹: mkd ...
- python进行linux系统监控
python进行linux系统监控 Linux系统下: 静态指标信息: 名称 描述 单位 所在文件 mem_total 内存总容量 KB /proc/meminfo disks 磁盘相关信息 - ...
- Shell test 命令,Shell 输入/输出重定向
一.Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -g ...
- spring中aop使用
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查.缓存) Spring的基 ...
- angular2 post以“application/x-www-form-urlencoded”形式传参的解决办法
angular2 post以“application/x-www-form-urlencoded”形式传参的解决办法 http://blog.csdn.net/tianjun2012/article/ ...
- 009PHP基础知识——运算符(二) 逻辑运算符
<?php /**运算符(二) 逻辑运算符: */ //1.逻辑与 and或&& 左右两边表达式均成立TRUE ,返回真值: /*$uname='admin'; $upwd='l ...