Решение задачи №344 «Ближайшие точки» с ACMP





Решение задачи №344 «Ближайшие точки» с ACMP

Условие задачи

Антон в школе начал изучать математику. Его внимание привлекло новое для него понятие числовой прямой. Антон быстро научился вычислять расстояния между двумя точками на этой прямой, задавать отрезки и интервалы на ней.

Готовясь к контрольной работе, Антон столкнулся со следующей задачей: «На числовой прямой задано n точек. Необходимо найти среди них две ближайшие». Расстояние между двумя точками числовой прямой x и y равно |x - y|.

Требуется написать программу, которая поможет Антону решить поставленную задачу.

Входные данные
Первая строка входного файла INPUT.TXT содержит количество точек n (2 ≤ n ≤ 105). Вторая строка содержит n различных целых чисел xi – координаты заданных точек числовой прямой. Числа в строке разделены пробелом. Значения всех координат xi не превосходят 109 по абсолютной величине.

Выходные данные
В первой строке выходного файла OUTPUT.TXT необходимо вывести минимальное расстояние между двумя точками, заданными во входном файле. Во второй строке выходного файла необходимо вывести номера точек, которым соответствует найденное расстояние. Точки нумеруются натуральными числами от 1 до n в том порядке, в котором они заданы во входном файле. Если ответов несколько, выведите тот из них, в котором точки расположены левее других на числовой прямой. Первым выводится номер левой точки, далее через пробел – номер правой точки.

#include <iostream>
using namespace std;
void Swap (int &a,int &b)
{int c=a;a=b;b=c;}

void QuickSort(int a[],int b[], int n)
{
int l,r,x;
if(n<2)return;
l=0;r=n-1;x=a[n/2];
do{while(a[l]<x)l++;
while(a[r]>x)r--;
if(l<=r)
{swap(a[l],a[r]);
swap(b[l],b[r]);
l++;
r--;
}
}while(r>=l);
QuickSort(a,b,r+1);
QuickSort(a+l,b+l,n-l);

}
int main()
{
int a[100000],b[100000],n,k,d;
cin>>n;
for(int i = 0; i < n; i++)
{ cin>>a[i];
b[i]=i+1;}
QuickSort(a,b,n);
d=a[1]-a[0];k=0;
for(int i=1;i<n-1;i++)
if(a[i+1]-a[i]<d)
{
d=a[i+1]-a[i];
k=i;
}
cout<<d<<endl<<b[k]<<' '<<b[k+1];
}



Условия задач взяты с сайта acmp.ru