极多数据的输出前k(k<10)大值——swust oj福布斯排行榜(0273)
2016-02-14 19:03
447 查看
本题解题用m,n代替n,k。
看到这个题,想个思路吧,全部排序取前k个输出不就行了,然而这样大的运算量,运行起来是相当费力的,当数据达到10^6内存就不够了,运行时间也相当长了。当然不实用。
排序过程再改改,先排前n个,再把后面的放进去比较大小,看插入进哪里。提交的时候还是显示memory limit exceed,内存占用过大了。
下面是代码及参考他人代码优化的解析:
#include<stdio.h>//0273 struct candidate { float pro; char name[65]; }; struct candidate ca[1000010],temp;//结构体太大只能放在外面,然而占内存太大的问题免不了,于是改为一个一个输入,进行判断,可能符合条件的才留下。 int main() { int m,n,i,j,t,k,cou=0; while(scanf("%d %d",&m,&n)!=EOF) { if(cou!=0) printf("\n"); cou++; for(i=0;i<m;i++)//输入 { scanf("%s %f",ca[i].name,&ca[i].pro); } for(i=0;i<n-1;i++)//排序前n { t=i; for(j=i+1;j<n;j++)//比起单独给前n个数排序,不如一视同仁,要比较一起比较,最初的值赋为-1就很纯洁了 { if(ca[t].pro<ca[j].pro)t=j; } temp=ca[i];ca[i]=ca[t];ca[t]=temp; } for(i=n;i<m;i++)//插入后面足够大的数 { t=-1; for(j=n-1;j>=0;j--)//原本想的比较一下得出新值应该插入到哪里,再把比它小的值往后面顺移,减少运算量。但是题中要求要选出的前k个,k是很小的数,并不怕。而且如果用j=0;j<n;j++,步骤还会少些。所以改成从大到小依次判断交换。 { if(ca[i].pro>ca[j].pro)t=j; } if(t!=-1) { for(k=n-1;k>t;k--)ca[k]=ca[k-1]; ca[t]=ca[i]; } } for(i=0;i<n;i++)//输出 { printf("%s %g\n",ca[i].name,ca[i].pro); } } return 0; }
修改版:
#include<stdio.h>//0273,shuru,paixu--n,charu struct candidate { float pro; char name[65]; }; int main() { int m,n,i,j,cou=0;//cou~counter struct candidate ca[11],temp,x; while(scanf("%d %d",&m,&n)!=EOF) { if(cou)printf("\n"); cou++; for(i=0;i<n;i++) { ca[i].pro=-1; } for(i=0;i<m;i++) { scanf("%s %f",x.name,&x.pro); for(j=0;j<n;j++) { if(x.pro>ca[j].pro) { temp=ca[j]; ca[j]=x; x=temp; } } } for(i=0;i<n;i++) { printf("%s %g\n",ca[i].name,ca[i].pro); } } return 0; }
written by Sneexy
相关文章推荐
- 数位DP 计划
- LeetCode -- Range Sum Query 2D - Immutable
- [BZOJ2793][Poi2012]Vouchers
- delegate, Notification,KVO优缺点?
- C#连接SQLServer MySql 代码步骤总结
- hash和trie树概念
- HDU-ACM-1004
- Android学习之Http使用Post方式进行数据提交
- HDU 1171 Big Event in HDU
- [Android]Ultra-Pull-To-Refresh之listview下拉刷新、上拉加载的用例-已更新
- 59. Spiral Matrix II LeetCode
- [置顶] android实现防美拍点赞效果
- [算法]边界都是1的最大正方形大小
- C#遍历文件夹,只需一句话
- 216. Combination Sum III LeetCode
- 整个数据库搜索数据
- Codeforces 8VC Venture Cup 2016 - Elimination Round解题报告
- loganalyzer部署文档-(第一部分)
- HDFS详细讲解
- UnityNetwork