# PBinfo #4217 – DistMin – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerinţa
Scrieţi definiția completă a subprogramului C++ cu antetul:

int DistMin(int a[], int n, int x, int y)
Subprogramul returnează distanța minimă în modul dintre o poziție din vector pe care se află valoarea x și o poziție din vector pe care se află valoarea y. Numerele x și y se găsesc fiecare cel puțin o dată în vector. De exemplu, dacă a = (2,7,1,2,3,2,7,2,1,3,8,9,7), x=7 și y = 3, atunci distanța minimă este 2 care se obține din diferența dintre poziția a 7-a unde se află 7 și poziția a 5-a unde se află un 3.

Restricţii şi precizări

0 ≤ a[i], x, y ≤ 1.000
2 ≤ n ≤ 10.000
elementele vectorului a sunt indexate de la 0
x și y se găsesc fiecare cel puțin o dată în vectorul a
Puteți utiliza în rezolvare orice structură de date.

Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
int DistMin(int a[], int n, int x, int y)
{
    int X[10001], nx, Y[10001], ny, i, j, d;
    nx = ny = 0;
    for (i = 0; i < n; i++)
        if (a[i] == x) X[nx++] = i;
        else if (a[i] == y) Y[ny++] = i;
    int dmin = n + 1;
    i = j = 0;
    while (i < nx && j < ny)
    {
        d = abs(X[i] - Y[j]);
        dmin = min(d, dmin);
        if (X[i] < Y[j]) i++;
        else j++;
    }
    if (i < nx) dmin = min(dmin, X[i] - Y[ny - 1]);
    if (j < ny) dmin = min(dmin, Y[j] - X[nx - 1]);
    return dmin;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4217)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4217/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4217/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
