【CCFCSP】201412-3 集合竞价

该博客详细介绍了CCFCSP(中国计算机学会)2014年12月第3题——集合竞价问题。文章探讨了如何在限定时间和内存条件下,确定一个开盘价以最大化成交股票数量。提出了从遍历价格到使用优先队列优化的解决方案,并提醒读者注意数据类型的使用和输出格式的设定。
摘要由CSDN通过智能技术生成

试题编号: 201412-3
试题名称: 集合竞价
时间限制: 1.0s
内存限制: 256.0MB

整个交易中有多个买单和卖单,要求求一个开盘价使得出价大于等于开盘价的买单总股数与小于等于开盘价的卖单总股数之间最小值最大,即能把最多的卖出股票卖给买入的人。
注意读入数据的方式,因为题目中输入数据有任意多行,所以以EOF(end of file)作为读入结束的条件。在C++中可以直接使用while(cin>>SOMETHING)语句。,每一笔交易的信息可以用一个结构体来保存,其中还需要保存交易的类型(买,卖,被取消)。可以使用一个结构体数组保存所有交易的信息,方便交易取消时进行修改。
容易发现答案中的开盘价一定是所有的卖出价和买入价中的一个值。所以一个简单的做法是遍历所有出现过的价格,计算这个价格下能交易的股票数量,如果数量大于当前最大值,就更新这个最大值,并保存这个价格。
如果要使程序的时间效率更优,可以分别保存买单和卖单并进行排序,计算交易数量时只需要统计到最后一个满足条件的交易单。比这个更好的解法是使用优先队列。
下面的程序使用了最简单的方法计算答案。
注意点:交易的股票数量可能超过int范围,需要使用long long保存。答案可以使用printf输出,printf(“%.2f “, ans)即输出保留两位小数的ans值。

#include<iostream>
#include<cstring>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值