http://acm.hdu.edu.cn/showproblem.php?pid=2523
求出每种组合并进行排序,题意给的是小于但不包含等于的情况,在此种情况下,适合使用基数排序的方法。
#include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> int cmp(const void *a,const void *b); int f[1010],x[10010]; int main() { int tcase,n,k,i,j,temp,num,ans; while(scanf("%d",&tcase)==1) { while(tcase--) { scanf("%d%d",&n,&k); memset(x,0,sizeof(x)); num=0; for(i=0;i<n;i++) { scanf("%d",f+i); } qsort(f,n,sizeof(int),cmp); for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) { temp=f[j]-f[i]; x[temp]=1; } num=0; //for(i=0;i<4;i++) //printf("%d ",k); for(i=0;k;i++) { if(x[i]) { k--; } } printf("%d\n",i-1); } } } int cmp(const void *a,const void *b) { const int *e=(const int *)a; const int *f=(const int *)b; return *e-*f; }