问题描述
某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量。
  该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种:
  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[10];
 6     float price;
 7     long long num;
 8 };
 9 struct charge order[5005];
10
11 int main(int argc, const char * argv[]) {
12     int i ,j ,k = 1 ;
13     int line ;
14     long long maxNum=0 ;
15     float p0 = 0.0 , flag = 0.0;
16     while(scanf("%s" , order[k].tra )!= EOF)
17     {//输入记录
18         if(strcmp("buy" , order[k].tra)== 0 || strcmp("sell" , order[k].tra) == 0){
19             scanf("%f%lld" , &order[k].price, &order[k].num);
20         }
21         if(strcmp("cancel" , order[k].tra)==0){
22             scanf("%d",&line);//要撤销的行
23             order[k].price = 0.0 ;//cancel 密令下没有价格和数量,都设置为 0
24             order[k].num = 0 ;
25             order[line].price = 0.0 ;//将需要撤销的命令的价格、数量设置为0,等于取消操作
26             order[line].num = 0 ;
27         }
28         k ++;
29     }
30     for(i = 1 ; i < k ;i++)
31     {//按出价降序排序
32         int index;
33         float max ;
34         struct charge temp;
35         max = order[i].price;
36         for(j = i+1 ; 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 = 1 ; i <k ; i ++)
48     {//检查每一行命令,设置buy 的命令的价格作为开盘价
49         long long sellNum=0 , buyNum= 0 ,num;
50         if(strcmp(order[i].tra , "buy")==0)
51             p0 = order[i].price ;
52         else continue ;
53         for(j = 1 ; j < k ; j++)
54         {//如果以 p0 为开盘价,检查所有交易命令。
55             if(strcmp(order[j].tra , "buy")==0 && order[j].price >= p0){
56                 buyNum += order[j].num;//对于 buy ,如果出价大于等于 p0,则购入所需股数
57             }
58             if(strcmp(order[j].tra , "sell")==0 && 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 0;
67 }

明天CCF考试,求过~~~

转载于:https://www.cnblogs.com/roadofstudy/p/6576149.html

CCF2014123集合竞价(C语言版)相关推荐

  1. CCF201412-3 集合竞价(100分)

    试题编号: 201412-3 试题名称: 集合竞价 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘 ...

  2. c语言 静态链表插入排序,数据结构C语言版 表插入排序

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

  3. 资料分享:送你一本《数据结构(C语言版)》电子书!

    要想写出可复用.可扩展.易维护.灵活性好的代码,「数据结构」这一关必须要过啊! 在数据结构与算法的众多教材中,奉为经典的当属清华大学严蔚敏老师的著作.很多学校也选择这本书作为考研指定教材. 正在学习数 ...

  4. 资料分享:送你一本《数据结构(C#语言版)》电子书!

    对于信息类专业的学生而言,数据结构与算法是一门必修的课程.只有学好这门课程,熟练掌握线性表.栈.队列.树.图等基本结构,以及在这些结构上的各种算法,才能利用计算机去解决实际问题. 如何学好这门课程呢, ...

  5. 数据结构(C语言版) 第 八 章 排序 知识梳理 + 习题详解

    目录 一.归并排序 二.交换排序 1.快速排序 2.冒泡排序 三.插入排序 1.直接插入排序(基于顺序查找) 2.折半插入排序(基于折半查找) 3.希尔排序(基于逐趟缩小增量) 四.选择排序 0.直接 ...

  6. 数据结构(C语言版) 第 六 章 图 知识梳理 + 习题详解

    目录 一. 图的基本定义和术语 一.图的基本概念 1.度 2.连通 (1)连通图 (2)强连通/强连通图 3.回路 4.完全图 二.图的三种存储结构 1.邻接矩阵表示法 2.邻接表(链式)表示法 3. ...

  7. 数据结构(C语言版) 第 三 章 栈与队列 知识梳理 + 作业习题详解

    目录 一.栈 0.栈的基本概念 1.栈的实现 2.栈与递归 3.Hanoi塔问题 二.队列 0.队列的基本概念 1.队列的实现 2.循环队列 2.1循环队列的相关条件和公式: 3.链队列 4.链队列完 ...

  8. 数据结构(C语言版) 第二章 线性表 知识梳理+作业习题详解

    目录 一.线性表顺序存储结构(顺序表) 0.线性表的基本概念 1.样例引入:多项式相加 二.线性表链式存储结构(链表) 0.链表的基本概念 1.前插法代码实例 2.链表尾插法完整代码附带各种操作 三. ...

  9. 数据结构c语言函数大全,数据结构习题库(c语言版).doc

    数据结构习题库(c语言版) 第一章 绪 论 一.基本内容 数据.数据元素.数据对象.数据结构.存储结构和数据类型等概念术语的确定含义.抽象数据类型的定义.表示和实现方法.描述算法的类C语言.算法设计的 ...

  10. 为什么C语言是非形式化的,《数据结构C语言版》——绪论

    <数据结构C语言版>--绪论<笔记> 一.基本概念和术语 1.数据,数据元素, 数据项,数据对象 数据:是客观事物的符号表示,是所有能够输入到计算机中并被计算机程序处理的符号的 ...

最新文章

  1. linux中ftp用户,linux中怎么添加ftp用户
  2. 搭建接口自动化测试环境,这3个工具就够了
  3. 暂时关闭 windows 病毒防护
  4. 4/5 MySQL入门总结:数据表(TABLE)操作
  5. MongoDB 教程二: 添加, 删除,查询 shell命令
  6. router锚点和html锚点,react-router 环境使用锚点的方法
  7. (转) Deep Learning Resources
  8. js实现css、addClass、removeClass和toggleClass
  9. iOS根据模型获取模型字段以及字段的类型(用于创建数据库的表)
  10. 编程判断元素归类_编程:找出所有符合条件的元素
  11. 2018年下半年计算机软件,2018年下半年程序员真题+答案解析(全国计算机软考)上午选择+下午案例完整版.pdf...
  12. 日志管理系统rsyslogd
  13. Monte Carlo算法
  14. 中秋闲来无事,自己写个2048玩玩
  15. 零信任体系下的企业数据安全建设路径
  16. tpshop php版本,TPshop安装向导 - Powered by TPshop
  17. 一文了解“什么是ACL”、“什么是EACL”、“什么是NAACL”、“什么是AACL”国际会议
  18. 秒赚大钱_容易记住,赚大钱
  19. nodejs获取时间戳
  20. 加速汽车行业转型,云计算到底扮演了什么角色?

热门文章

  1. mysql8自定义安装位置_docker 自定义安装 mysql8
  2. 单个字段中根据条件剔除数据
  3. 如何在Windows环境下使用PyCharm开发PySpark
  4. Linux命令——lsb_release
  5. PHP回顾之多进程编程
  6. 经典]Linux内核中ioremap映射的透彻理解【转】
  7. 让解析器可以快速处理词法单元之间的空格
  8. UVA 11478(差分约束 + 二分)
  9. Ibatis中SqlMapClientTemplate和SqlMapClient的区别
  10. Maclean写的Oracle入门书