HDU 2008-10 Programming Contest
题目大意:给你N个数,找出这N个数中,两个数之间的差值的绝对值第K小的那两个数
的差的绝对值。
思路:因为数的范围是[0,2000],所以差的绝对值范围也是[0,2000]。用数组A[]存下N
个数。然后两重循环遍历这N个数,将差的绝对值作为下标,统计相同差的绝对值有多少
个,存入数组ab[]中。最后从前到后遍历一遍数组ab[],每找到差的绝对值不为0的ab[i],
就让K--。当K = 0,就找到了答案。
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int A[1100],ab[2200]; int main() { int T; cin >> T; while(T--) { memset(ab,0,sizeof(ab)); int N,K; cin >> N >> K; for(int i = 0; i < N; ++i) cin >> A[i]; for(int i = 0; i < N; ++i) { for(int j = i+1; j < N; ++j) { ab[abs(A[i]-A[j])]++; } } for(int i = 0; i <= 2000; ++i) { if(ab[i]) K--; if(K == 0) { cout << i << endl; break; } } } return 0; }