hdu 1425:sort
Problem Description
给你n个整数,请按从大到小的顺序输出其中前m大的数。
Input
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
Output
对每组测试数据按从大到小的顺序输出前m大的数。
Sample Input
5 3 3 -35 92 213 -644
Sample Output
213 92 3
思路:用快排函数,快排函数的手写函数有点子烦啊,这里千万要注意用cin/cout就超时!!!!!!
#include<cstdio> #include<iostream> #include<functional> #include<algorithm> using namespace std; int a[1000005]; int cmp(const void* a, const void* b) { return *(int*)b - *(int*)a; } int main() { int n, k; while (~scanf("%d%d", &n, &k)){ for (int i = 0; i < n; i++) scanf("%d", &a[i]); //cin >> a[i]; qsort(a, n, sizeof(int), cmp); //sort(a, a + n, greater<int>()); for (int i = 0; i < k; i++) { if (i != k - 1) printf("%d ", a[i]); else printf("%d\n", a[i]); //if (i == 0)cout << a[i]; //else cout << " " << a[i]; } //cout << endl; } return 0; }
注意一下快排函数中cmp的写法:
- 结构体
struct array { int x; int y; }arr[1000]; int cmp(const void *a , const void *b) { return ((array *)a)->x - ((array *)b)->x; } qsort(arr,1000,sizeof(arr[0]),cmp);