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 ...
随机推荐
- 第八章:部署Tornado
到目前为止,为了简单起见,在我们的例子中都是使用单一的Tornado进程运行的.这使得测试应用和快速变更非常简单,但是这不是一个合适的部署策略.部署一个应用到生产环境面临着新的挑战,既包括最优化性能, ...
- python调用虹软2.0第二版
第一版踩了无数的坑,终于第二版把坑全添了,这次更新可以正常获取人脸数,角度,代码可读性更高,继续更新中 第三版已发出 https://www.cnblogs.com/wxt51/p/10125460. ...
- Java接受键盘输入
import java.util.Scanner;//方法1 import java.io.BufferedReader;//方法2 import java.io.IOException;//方法3 ...
- Template、ItemsPanel、ItemContainerStyle、ItemTemplate (部分内容有待验证)
以下摘自“CSDN”的某人博客,部分内容有待验证,需注意“辨别学之....” 1.Template是指控件的样式 在WPF中所有继承自contentcontrol类的控件都含有此属性,(继承自Fram ...
- LeetCode 275. H-Index II
275. H-Index II Add to List Description Submission Solutions Total Accepted: 42241 Total Submissions ...
- Seaborn-05-Pairplot多变量图
转自:http://www.jianshu.com/p/6e18d21a4cad
- ansible入门三(Ansible的基础元素和YAML介绍)
Ansible的基础元素和YAML介绍 本节内容: YAML Ansible常用的数据类型 Ansible基础元素 一.YAML 1. YAML介绍 YAML是一个可读性高的用来表达资料序列的格式 ...
- MySQL索引优化详解
MySQL存储引擎简介 查看命令 a. 查看所使用的MySQL现在已提供什么存储引擎: mysql> show engines; b. 查看所使用的MySQL当前默认的存储引擎: mysql&g ...
- *SCM-MANAGER独立部署方式
从官网获取最新版本 scm-manager 独立安装包 https://www.scm-manager.org/download/ 解压 为合适的路径 修改 services.bat 文件服务相关信息 ...
- 前端url传递编码问题
JAVASCRIPT中URL 传递参数(特殊字符)解决方法及转码解码的介绍 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.下表中列出了一些URL特殊符 ...