BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #92293同步于 2016/6/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

string.h问题

wang10211223
2016/6/26镜像同步1 回复
在杭电上做1425题 题目要求是:给你n个整数,请按从大到小的顺序输出其中前m大的数。 使用下面代码 ``` #include <stdio.h> #include <algorithm> using namespace std; int a[1000000]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<n;i++) { scanf("%d",&a[i]); } sort(a,a+n);//,cmp printf("%d",a[n-1]); for(int i=n-2;i>=n-m;i--) { printf(" %d",a[i]); } printf("\n"); } return 0; } ``` 在本地devC++测试正常输出 在杭电oj会超时 但是在头文件加上string.h就不会超时 求问string.h在这里的作用 多谢 又发现一个问题 当使用如下代码: ``` #include<stdio.h> #include<malloc.h> #include<algorithm> using namespace std; int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ int*a=(int*)malloc(sizeof(int)*n); int i; for(i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); for(i=n-1;i>n-m;i--){ printf("%d ",a[i]); } printf("%d\n",a[n-m]); free(a); } return 0; } ``` 会超时 但是添加头文件iostream就不会超时 但在devc++都能测试通过 小白提问 @nuanyangyang
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
nuanyangyang机器人#1 · 2016/6/26
试着不要排序,把数据分成sqrt (n)组,每组sqrt(n)个元素。先用线性查找找到每组的最大值,然后再在这些最大值中找到全局最大值。之后,原来那个最大值来自哪个组,就从那个组里找到次大值,然后再找全局最大值。如此循环。 复杂度是O(n+k*sqrt(n)), 其实复杂度比用堆还要高,但如果k特别小的话…… 【 在 wang10211223 的大作中提到: 】 : 在杭电上做1425题 题目要求是:给你n个整数,请按从大到小的顺序输出其中前m大的数。 : 使用下面代码 : ``` : ...................