http://acm.hdu.edu.cn/showproblem.php?pid=2523
求差的绝对值第k大的数,注意相同的差算一个。
分析出差的绝对值在[0,2000]这个范围内,由此可以搞出hash数组
View Code
#include <stdio.h> #include <string.h> #include <stdlib.h> int abs(int a) { return a>0?a:-a; } int a[3000],hash[5000]; int main() { int t,n,k; int i,j; scanf("%d",&t); while(t--) { memset(hash,0,sizeof(hash)); scanf("%d%d",&n,&k); for(i=0;i<n;i++) scanf("%d",a+i); for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) hash[abs(a[i]-a[j])]=1; int cnt=0; for(i=0;i<=2000;i++) if(hash[i]){ cnt++; if(cnt==k) break; } printf("%d\n",i); } return 0; }