问题描述
  某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量。
  该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种:
  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分版本的代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. struct charge{
  5. char tra[];
  6. float price;
  7. long long num;
  8. };
  9. struct charge order[];
  10.  
  11. int main(int argc, const char * argv[]) {
  12. int i ,j ,k = ;
  13. int line ;
  14. long long maxNum= ;
  15. float p0 = 0.0 , flag = 0.0;
  16. while(scanf("%s" , order[k].tra )!= EOF)
  17. {//输入记录
  18. if(strcmp("buy" , order[k].tra)== || strcmp("sell" , order[k].tra) == ){
  19. scanf("%f%lld" , &order[k].price, &order[k].num);
  20. }
  21. if(strcmp("cancel" , order[k].tra)==){
  22. scanf("%d",&line);//要撤销的行
  23. order[k].price = 0.0 ;//cancel 密令下没有价格和数量,都设置为 0
  24. order[k].num = ;
  25. order[line].price = 0.0 ;//将需要撤销的命令的价格、数量设置为0,等于取消操作
  26. order[line].num = ;
  27. }
  28. k ++;
  29. }
  30. for(i = ; i < k ;i++)
  31. {//按出价降序排序
  32. int index;
  33. float max ;
  34. struct charge temp;
  35. max = order[i].price;
  36. for(j = i+ ; j < k ;j++)
  37. {
  38. if(order[j].price >= max){
  39. max = order[j].price;
  40. index = j ;
  41. }
  42. }
  43. temp = order[i];
  44. order[i] = order[index];
  45. order[index] = temp;
  46. }
  47. for(i = ; i <k ; i ++)
  48. {//检查每一行命令,设置buy 的命令的价格作为开盘价
  49. long long sellNum= , buyNum= ,num;
  50. if(strcmp(order[i].tra , "buy")==)
  51. p0 = order[i].price ;
  52. else continue ;
  53. for(j = ; j < k ; j++)
  54. {//如果以 p0 为开盘价,检查所有交易命令。
  55. if(strcmp(order[j].tra , "buy")== && order[j].price >= p0){
  56. buyNum += order[j].num;//对于 buy ,如果出价大于等于 p0,则购入所需股数
  57. }
  58. if(strcmp(order[j].tra , "sell")== && order[j].price <= p0){
  59. sellNum += order[j].num;//对于sell 命令,如果出价小于等于 p0 ,则出售所要出售的股数
  60. }
  61. }
  62. num = (buyNum >= sellNum )? sellNum : buyNum;//能够成交的股数应该是购入和出售之间较小的那个数量
  63. if(num > maxNum){ maxNum = num ; flag = p0;}//寻找最大的那个能成交的股数
  64. }
  65. printf("%.2f %lld\n", flag , maxNum) ;
  66. return ;
  67. }

明天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. 决策树--信息增益,信息增益比,Geni指数的理解

    决策树 是表示基于特征对实例进行分类的树形结构       从给定的训练数据集中,依据特征选择的准则,递归的选择最优划分特征,并根据此特征将训练数据进行分割,使得各子数据集有一个最好的分类的过程.   ...

  2. 获取天气预报API5_统计最容易生病时间段

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  3. Goslate: Free Google Translate API

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  4. vue props的理解

    vue用了这么久,今天发现父子组件还是傻傻的分不清,不过还好,今天终于搞懂了 vue中到底什么是父组件,什么是子组件 vue之props父子组件之间的谈话 简单的理解就是:使用的地方是父组件,定义的地 ...

  5. bzoj千题计划302:bzoj3160: 万径人踪灭

    https://www.lydsy.com/JudgeOnline/problem.php?id=3160 不连续的回文串数量=所有的回文序列数量-连续的回文子串 连续的回文子串: manacher ...

  6. Linux 命令详解(六)Linux 守护进程的启动方法

    Linux 守护进程的启动方法 http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html

  7. js 原生 ajax

    //js ajax function Ajax(url,type,data,comFun,sucFun,errFun) { //1.创建XMLHttpRequest对象 var xmlHttpRequ ...

  8. Linux TCP 连接数

    查看 TCP 连接数 : 每一个 IP 访问的链接数:head 默认 前10 netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print ...

  9. react框架实现点击事件计数小案例

    下面将以一个小案例来讲解react的框架的一般应用,重点内容在代码段都有详细的解释,希望对大家有帮助 代码块: 代码块: import React from 'react'; import React ...

  10. B. Planning The Expedition

    题目链接:http://codeforces.com/contest/1011/problem/B 题目大意: 输入的n,m代表n个人,m个包裹. 标准就是 每个人一开始只能选定吃哪一个包裹里的食物, ...