CCF-201412-3-集合竞价
| 试题编号: | 201412-3 |
| 试题名称: | 集合竞价 |
| 时间限制: | 1.0s |
| 内存限制: | 256.0MB |
| 问题描述: |
问题描述
某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量。
该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种: 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。
|
解题思路:
这道题一直拿不了满分从0/30/40/50/90,心累
一道模拟题,暴力枚举,算出每个价格下的成交量取大值
我确定的价格的变化范围是卖出的最低价~买进的最高价之间,因为小于卖出的最低价或者大于买进的最高价都会使得成交量变成0,没有什么特别大的意义。
从低价格向上枚举。
注意:
刚开始以为会存在这样的情况:
再来一条删除命令 要删除前面的删除命令/相当于前面的删除命令失效了
<span style="font-size:18px;">#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std; struct node
{
int flag;//是否删除
int bs;//买进还是卖出还是删除命令,1表示买进,-1表示卖出,0表示删除命令
int price;//股票价格
int number;//股票数量
int index;//处于第几行命令
int del;//要删除第几行的命令
}; node ans[5005]; void init()
{
for(int i=0;i<5005;i++)
{
ans[i].flag=0;//表示不删除该命令
ans[i].del=-1;//-1表示当前命令是b or s
ans[i].bs=0;
}
} int main()
{
char s[15];
int k=1;//命令的位置
int num;
double pri;
int order;
init();
while(scanf("%s",s)!=EOF)
{
if(s[0]=='b')//买进股票
{
scanf("%lf%d",&pri,&num);
ans[k].bs=1;
ans[k].index=k;
ans[k].number=num;
ans[k].price=(int)(pri*100);
k++;
}
else if(s[0]=='s')//卖出股票
{
scanf("%lf%d",&pri,&num);
ans[k].bs=-1;
ans[k].index=k;
ans[k].number=num;
ans[k].price=(int)(pri*100);
k++;
}
else if(s[0]=='c')//删除命令
{
scanf("%d",&order);
ans[k].del=order;
ans[k].index=k;
int temp=order;
ans[temp].flag=1;
k++;
}
}
int max_pri=0;
int min_pri=0x3f3f3f3f;
for(int i=1;i<k;i++)
{
if(ans[i].bs==1&&ans[i].flag==0)
{
if(ans[i].price>max_pri)
max_pri=ans[i].price;
}
}
for(int i=1;i<k;i++)
{
if(ans[i].bs==-1&&ans[i].flag==0)
{
if(ans[i].price<min_pri)
min_pri=ans[i].price;
}
}
long long ans_num=0;
int ans_pri;
for(int i=min_pri;i<=max_pri;i++)
{
long long pb=0;
long long ps=0;
for(int j=1;j<k;j++)
{
if(ans[j].bs==1&&ans[j].flag==0&&ans[j].price>=i)//买
{
pb+=ans[j].number;
}
else if(ans[j].bs==-1&&ans[j].flag==0&&ans[j].price<=i)//卖
{
ps+=ans[j].number;
}
long long temp=min(pb,ps);
if(temp>=ans_num)
{
ans_pri=i;
ans_num=temp;
}
}
}
double res_pri=(ans_pri*1.0)/100;
printf("%.2lf %lld\n",res_pri,ans_num);
return 0;
}</span>
CCF-201412-3-集合竞价的更多相关文章
- CCF CSP 201412-3 集合竞价
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201412-3 集合竞价 问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确 ...
- ccf集合竞价
我不懂为什么是错误.然后零分.贴出测试. 然后即使注释掉while循环中的break部分,也是如此. #include<iostream> #include<iomanip> ...
- CCF 集合竞价
题目: 问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量. 该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种: 1. buy p s ...
- 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 ...
随机推荐
- SQL基本查询_单表查询(实验二)
SQL基本查询_单表查询(实验二) 查询目标表结构及数据 emp empno ename job hiedate sal comn deptno 1007 马明 内勤 1992-6-12 4000 2 ...
- Log4j – Log4j 2 API
Overview The Log4j 2 API provides the interface that applications should code to and provides the ad ...
- 远程连接SQL Server 2014遇到的问题和解决
在本机可以通过IP地址的数据库引擎登录数据库,可用同网段的其它电脑远程登录一直不成功.查看网上资料,认为是主机防火墙的问题. 在微软网站上查找相关的文档找到了答案.http://msdn.micros ...
- Number 类型
Javascript使用IEEE -754格式存储整型和浮点型(有些语言称为双精度) 因为这种存储格式,所以javascript中有正的0和负的0 整型也可以存储八进制和十六制 八进制第一个数 ...
- 机器翻译评测——BLEU改进后的NIST算法
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7765345.html 上一节介绍了BLEU算的缺陷.NIS ...
- 深入理解ES6之—set与map
Set是无重复值的有序列表.Set会自动移除重复的值,因此你可以使用它来过滤数组中重复的值并返回结果. Map是有序的键值对,其中的键允许是任何类型. Set和Map是es6新增的两个数据集合. Se ...
- URL模块之parse方法
url.parse(urlString , boolean , boolean) parse这个方法可以将一个url的字符串解析并返回一个url的对象. 参数: urlString指传入一个url地址 ...
- 虚拟机通信配置与Xshell连接
本文主要讲解虚拟机通信配置的详细步骤和Xshell工具连接,以及如何诊断网络问题并进行相应配置的问题. 1. 虚拟机通信配置 虚拟机通信配置的基本流程如图所示: 首先,我们先打开新建的虚拟机,然后输入 ...
- QT制作窗口切换的小程序
前言:本次实验是在三个窗口之间自由切换,窗口中播放gif格式的动态图. 让我们先来看看使用到的主要的函数: 一.播放gif格式动态图的函数 QMovie *movie = new QMovie(&qu ...
- 五:用JAVA写一个阿里云VPC Open API调用程序
用JAVA写一个阿里云VPC Open API调用程序 摘要:用JAVA拼出来Open API的URL 引言 VPC提供了丰富的API接口,让网络工程是可以通过API调用的方式管理网络资源.用程序和软 ...