đề bài tìm khoảng cách nhỏ nhất giữa 2 phần tử và đếm số k/c nhỏ nhất.
N (N ≤ 100 000) số nguyên
A[i] (-10^9 ≤ A[i] ≤ 10^9) khoảng số nguyên
#include <stdio.h>
void sort(long local[], long n) {
long i, j;
for(i=0; i<n-1; i++) {
for(j=i+1; j<n; j++) {
if(local[i] < local[j]) {
long temp = local[i];
local[i] = local[j];
local[j] = temp;
}
}
}
}
int main() {
long test;
scanf("%ld", &test);
while(test--) {
long n;
scanf("%ld", &n);
long location[n+5];
long i;
for(i=0; i<n; i++) {
scanf("%ld", &location[i]);
}
sort(location, n);
long min1 = location[0]-location[1];
long min2 = location[n-2] - location[n-1];
long min = min1<=min2?min1:min2;
if(n<=3) {
if(min1==min2) printf("%ld %ld\n", min, 2);
else printf("%ld %ld\n", min, 1);
continue;
}
long count[n];
for(i=0; i<min+1; i++) count[i]=0;
if(n%2==0) {
for(i=1; i<n-1; i+=2) {
long t1 = location[i-1]-location[i];
long t2 = location[i]-location[i+1];
if(t1 <= min) {
count[t1]++;
}
if(t2 <= min) {
count[t2]++;
}
}
long t = location[n-2]-location[n-1];
if(t < min) {
count[t]++;
}
} else {
for(i=1; i<n; i+=2) {
long t1 = location[i-1]-location[i];
long t2 = location[i]-location[i+1];
if(t1 <= min) {
count[t1]++;
}
if(t2 <= min) {
count[t2]++;
}
}
}
for(i=1; i<min+1; i++) {
if(count[i]) {
printf("%ld %ld\n", i, count[i]);
break;
}
}
}
return 0;
}