18. 吃货
来源:互联网 发布:哪里有卖校管家软件 编辑:程序博客网 时间:2024/04/29 15:07
郭老师特别喜欢美食,是个典型的吃货,无聊的时候就会打开大众点评搜寻美食,每次都会选择几家综合评分高的餐厅满足口福,但他最近发现手机里面的大众点评软件貌似不好用了,没办法按照评分进行排序,所以每次都要从上翻到下找出评分最高的几家餐厅,很是苦恼。
现在请大家帮忙在纷繁众多的餐厅中找出评分最高的 m 个,推荐给郭老师。
输入
输入的第一行 n m 为正整数,n 表示餐厅的数目,m 表示需要找出的餐厅个数,1 ≤ m, n ≤ 10000000。随后的 n 行为 n 家餐厅的评分,范围为1~10000000的正整数。
输出
输出为 m 行,每行为餐厅的评分,评分按降序排列。
- 10 3↵
- 10↵
- 9↵
- 3↵
- 7↵
- 2↵
- 6↵
- 7↵
- 1↵
- 9↵
- 8↵
- 10↵
- 9↵
- 9↵
//由于此题数据量一部分较小一部分较大,故根据不同数据量使用不同的排序方法//对数据量较小的可以一遍输入一遍取缔输出数组NumStr[]中的最小值,同时注意对NumStr[]的及时维护#include<stdio.h> #include<stdlib.h>#include<string.h>int NumStr[1000] = { 0 };void Judge(int sum,int m){int flag = 0;if (NumStr[0] > sum)return;for (int i = 1; i < m; i++){if (NumStr[i] >= sum){NumStr[i - 1] = sum;flag = 1;break;}elseNumStr[i - 1] = NumStr[i];}if (!flag)//把这个判断条件从else里拿出来后就A了,不然有一个WA和一个TLE,很是奇怪NumStr[m - 1] = sum;}int main(void){int n, m, t;scanf("%d %d", &n, &m);getchar();char ch;int sum;if (m < 500000){memset(NumStr, 0, sizeof(NumStr));for (int i = 0; i < n; i++){sum = 0;while (1){ch = getchar();if (ch >= '0'&&ch <= '9')sum = sum * 10 + (ch - '0');else break;}Judge(sum,m);}for (int i = m - 1; i >= 0; i--){if (NumStr[i] != 0)printf("%d\n", NumStr[i]);}}else{char *Str_Num = (char *)calloc(10000001, 2);for (int i = 0; i < n; i++){sum = 0;while (1){ch = getchar();if (ch >= '0'&&ch <= '9')sum = sum * 10 + (ch - '0');else break;}Str_Num[sum]++;}for (int i = 10000000;; i--){if (m == 0||i==0) break;if (Str_Num[i] != 0)for (int j = 0; j < Str_Num[i]; j++){printf("%d\n", i);m--;if (m == 0)break;}}}return 0;}
还有一种写法(同学的)我就是看他的才有的思路,为了防止查重,把递归写法改成了循环
#include<stdio.h> #include<stdlib.h>#include<string.h>int judge(int p, int i);int mm[20000];int main(void){int n, m,t;scanf("%d %d", &n, &m);getchar();char ch;int sum;if (m < 400000){for (int i = 0; i < n; i++){sum = 0;while (1){ch = getchar();if (ch >= '0'&&ch <= '9'){sum = sum * 10 + (ch - '0');}else break;}judge(sum, m - 1);}for (int i = 0; i < m; i++){printf("%d\n", mm[i]);}}else{char *s = (char *)calloc(10000001, 2);for (int i = 0; i < n; i++){sum = 0;while (1){ch = getchar();if (ch >= '0'&&ch <= '9'){sum = sum * 10 + (ch - '0');}else break;}s[sum]++;}for (int i = 10000000;; i--){if (m == 0) break;while (s[i]--){printf("%d\n", i);m--;}}}return 0;}int judge(int p, int i){if (i == 0 && p > mm[i]){int y;y = p;p = mm[i];mm[i] = y;return p;}else if(p>mm[i]){int b = judge(p, i - 1);int y;y = b;b = mm[i];mm[i] = y;return b;}else{return p;}return 0;}
阅读全文
0 0
- 18. 吃货
- 吃货联盟
- 公共场合的吃货们
- 吃货876经验
- 吃货老爸-项目立项
- 21. 吃货续
- 餐前试毒:做个吃货,做个傻逼
- [乐意黎原创] 吃货是什么意思?
- 吃货876APP参考文档
- 吃货876参考文档二
- 厦门漳州吃货之行
- 吃货的自然语言消岐
- 好吃货在美食当中
- 让吃货失望的菜单
- S1复习项目吃货联盟
- bzoj 4479: [Jsoi2013]吃货jyy
- 20171029D-吃货的烦恼
- 吃货联盟点餐系统
- Node.js开发环境的构建及开发所需的一些工具的简单介绍(nvm、npm、supervisor)
- JVM学习笔记(二) 执行过程
- 17. 良乡食堂
- 用pandas处理MovieLens 1m 数据集
- 算法竞赛入门经典(第2版)-刘汝佳-解题源码说明
- 18. 吃货
- uget + aria2接管浏览器下载(附源中缺少uget-chrome-wrapper的解决办法).md
- [HK]常用工具类
- Mac上使用SVN
- 未来的世界
- 19. 编程排名
- 本标签内容解释【版权解释生命】
- AndroidStudio导入jar包
- 序: Android 系统架构学习 概述