问题描述
  某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量。
  该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种:
  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。
解题思路:
开盘价只能是buy和sell中的某个价格,又由于如果可成交股数相同则需要输出成交价较大的那个作为开盘价,因此只在 buy命令中寻找开盘价即可,这样既保证了题目要求,又减少了时间开支。
写完代码提交时只有80分,后来对所有命令的出价进行降序排序,再次提交还是80分,可见排序对此题也没用。始终不知道问题出在哪里。下面给出80分版本的代码:
 #include <stdio.h>
#include <string.h> struct charge{
char tra[];
float price;
long long num;
};
struct charge order[]; int main(int argc, const char * argv[]) {
int i ,j ,k = ;
int line ;
long long maxNum= ;
float p0 = 0.0 , flag = 0.0;
while(scanf("%s" , order[k].tra )!= EOF)
{//输入记录
if(strcmp("buy" , order[k].tra)== || strcmp("sell" , order[k].tra) == ){
scanf("%f%lld" , &order[k].price, &order[k].num);
}
if(strcmp("cancel" , order[k].tra)==){
scanf("%d",&line);//要撤销的行
order[k].price = 0.0 ;//cancel 密令下没有价格和数量,都设置为 0
order[k].num = ;
order[line].price = 0.0 ;//将需要撤销的命令的价格、数量设置为0,等于取消操作
order[line].num = ;
}
k ++;
}
for(i = ; i < k ;i++)
{//按出价降序排序
int index;
float max ;
struct charge temp;
max = order[i].price;
for(j = i+ ; j < k ;j++)
{
if(order[j].price >= max){
max = order[j].price;
index = j ;
}
}
temp = order[i];
order[i] = order[index];
order[index] = temp;
}
for(i = ; i <k ; i ++)
{//检查每一行命令,设置buy 的命令的价格作为开盘价
long long sellNum= , buyNum= ,num;
if(strcmp(order[i].tra , "buy")==)
p0 = order[i].price ;
else continue ;
for(j = ; j < k ; j++)
{//如果以 p0 为开盘价,检查所有交易命令。
if(strcmp(order[j].tra , "buy")== && order[j].price >= p0){
buyNum += order[j].num;//对于 buy ,如果出价大于等于 p0,则购入所需股数
}
if(strcmp(order[j].tra , "sell")== && order[j].price <= p0){
sellNum += order[j].num;//对于sell 命令,如果出价小于等于 p0 ,则出售所要出售的股数
}
}
num = (buyNum >= sellNum )? sellNum : buyNum;//能够成交的股数应该是购入和出售之间较小的那个数量
if(num > maxNum){ maxNum = num ; flag = p0;}//寻找最大的那个能成交的股数
}
printf("%.2f %lld\n", flag , maxNum) ;
return ;
}

明天CCF考试,求过~~~

CCF2014123集合竞价(C语言版)的更多相关文章

  1. libnode 0.4.0 发布,C++ 语言版的 Node.js

    libnode 0.4.0 支持 Windows ,提升了性能,libuv 更新到 0.10.17 版本,libj 更新到 0.8.2 版本. libnode 是 C++ 语言版的 Node.js,和 ...

  2. md5加密算法c语言版

    from: http://blog.sina.com.cn/s/blog_693de6100101kcu6.html 注:以下是md5加密算法c语言版(16/32位) ---------------- ...

  3. 基于gSOAP使用头文件的C语言版web service开发过程例子

    基于gSOAP使用头文件的C语言版web service开发过程例子 一服务端 1 打开VS2005,创建一个工程,命名为calcServer. 2 添加一个头文件calc.h,编辑内容如下: 1// ...

  4. Windows 8.1 with Update 镜像下载(增OEM单语言版)

    该系统已有更新的版本,请转至<Windows 8.1 with update 官方最新镜像汇总>下载. 2014年4月9日凌晨,微软向MSDN订阅用户开放了Windows 8.1 with ...

  5. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  6. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  7. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  8. VS2015如何新建C++或者C语言版的lib文件

    当我们不想公开我们的代码的时候,可以把我们的代码封装成静态数据连接库,即lib文件.下面介绍下如何生成lib文件. 以VS2015为例,一种是C++版的lib文件,一种是C语言版的lib文件. 一.按 ...

  9. hbase rest api接口链接管理【golang语言版】

    # go-hbase-resthbase rest api接口链接管理[golang语言版]关于hbase的rest接口的详细信息可以到官网查看[http://hbase.apache.org/boo ...

  10. 2048小游戏代码解析 C语言版

    2048小游戏,也算是风靡一时的益智游戏.其背后实现的逻辑比较简单,代码量不算多,而且趣味性强,适合作为有语言基础的童鞋来加强编程训练.本篇分析2048小游戏的C语言实现代码. 前言 游戏截图:  游 ...

随机推荐

  1. Spring MVC程序中怎么得到静态资源文件css,js,图片文件的路径问题

    问题描述 在用springmvc开发应用程序的时候.对于像我一样的初学者,而且还是自学的人,有一个很头疼的问题.那就是数据都已经查出来了,但是页面的样式仍然十分简陋,加载不了css.js,图片等资源文 ...

  2. memcache、redis原理对比

    一.问题:     数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求.   二.解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库     ( ...

  3. jenkins master-slave配置

    如果要想自动化构建,需要slave主机能够从源码库上拉代码,并打包构建 选取指定的slave进行构建 jenkins + docker 实现slave的动态构建和销毁 https://www.cnbl ...

  4. Nginx的alias的用法及与root的区别

    以前只知道Nginx的location块中的root用法,用起来总是感觉满足不了自己的一些想法.然后终于发现了alias这个东西. 先看toot的用法 location /request_path/i ...

  5. mySql插入网页地址失败

    如题:插入的网页地址失败,只显示了开头10位字符.以为是特殊字符的问题. 后来发现是字符串长度不够: ALTER TABLE `news`  MODIFY COLUMN `from` VARCHAR( ...

  6. 从面向对象的角度重新认识JS世界

    一. 背景  距离上一篇JS文章已经20天,经重新总结发现,上一篇概况的有点浅显,适合初学js的入门了解,但对于已经学习js一段时间的人,或者是想系统的了解JS体系,接下来的文章可能会更有帮助. 该系 ...

  7. Winform窗体设计工具源码

    源代码:QQ群616945527,博客资源

  8. linux系统--用户和用户组

    一.用户和用户组的概念 用户:使用操作系统的人 用户组:具有相同系统权限的一组用户.在linux系统中可以存在多个用户组 1.1 /etc/group 这里存储当前系统中所有用户组的信息 每一行对应一 ...

  9. mips体系堆栈回溯分析与实现

    转载:http://www.sohu.com/a/118385096_468740 mips栈帧原理 Call stack 是指存放某个程序的正在运行的函数的信息的栈.Call stack 由 sta ...

  10. Linux - 网络检测

    linux 利用bmon/nload/iftop/vnstat/iptraf实时查看网络带宽状况 .添加yum源方便安装bmon # rpm -Uhv http://apt.sw.be/redhat/ ...