# PBinfo #2087 – Kminsum – Rezolvare C++

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

## Enunț

Cerința
Se consideră un număr natural k și două tablouri unidimensionale A și B, cu n respectiv m elemente, numere întregi, sortate crescător. Să se afișeze primele k perechi de numere de sumă minimă. Fiecare pereche conține un număr din A, un număr din B.  

Date de intrare
Fișierul de intrare kminsum.in conține pe prima linie trei numere naturale n, m și k având semnificația din enunț.
Pe a doua linie se găsesc n numere naturale separate prin spații ce reprezintă elementele tabloului A.
Pe a treia linie se găsesc m numere naturale separate prin spații ce reprezintă elementele tabloului B.

Date de ieșire
Fișierul de ieșire kminsum.out va conține k linii. Fiecare linie conține două numere întregi separate prin spațiu ce reprezintă descrierea unei perechi (un număr din A, un număr din B)..

Restricții și precizări

1 ≤ n, m ≤ 1000
1 ≤ k ≤ 20000
valorile elementelor celor două tablouri vor aparține intervalului [-1.000.000,1.000.000]
ordinea de afișare a celor k perechi nu contează

Exemplu:
kminsum.in

5 3 4
1 2 3 4 5
2 3 6
kminsum.out

1 2
1 3
2 2
2 3
Explicație
Tablou A conține 5 numere sortate crescător, tablou B conține 3 numere sortate crescător. Se pot forma 5•3 perechi. Primele 4 perechi corect formate de sumă minimă sunt: 1 2, 1 3, 2 2, 2 3.

## Cod sursă C++

```cpp
# include <cstdio>
# include <climits>
# include <cstring>
# define maxn 10002
using namespace std;
int A[maxn],B[maxn],ind[maxn];
int n,m,k;
int main()
{
    int i,j,min_sum,min_index;
    freopen("kminsum.in","r",stdin);
    freopen("kminsum.out","w",stdout);
    scanf("%d%d%d",&n,&m,&k);
    for(i=0; i<n; ++i)
    {
        scanf("%d", &A[i]);
    }
    for(i=0; i<m; ++i)
    {
        scanf("%d", &B[i]);
    }
    while (k--)
    {
        min_sum=INT_MAX;
        min_index=0;
        for (j=0; j<n; ++j)
        {
            if (ind[j]<m && A[j]+B[ind[j]]<min_sum)
            {
                min_index=j;
                min_sum=A[j]+B[ind[j]];
            }
        }
        printf("%d %d\n",A[min_index],B[ind[min_index]]);
        ind[min_index]++;
    }
    return 0;
}
```

## Resurse

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