fbpx

Problema #2087 – Kminsum – Rezolvari PBInfo

de Mihai-Alexandru

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ț.

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.

#include <bits/stdc++.h>
using namespace std;

ifstream fin("kminsum.in");
ofstream fout("kminsum.out");

int n, m, k, a[1001], b[1001];

void cmmp(int arr1[], int n1, int arr2[],int n2, int k)
{
    int index2[n1];
    memset(index2, 0, sizeof(index2));
    while (k > 0)
    {
        int min_sum = INT_MAX;
        int min_index = 0;
        for (int i1 = 0; i1 < n1; i1++)
        {
            if (index2[i1]<n2 && arr1[i1]+arr2[index2[i1]]<min_sum)
            {
                min_index = i1;
                min_sum = arr1[i1] + arr2[index2[i1]];
            }
        }
        fout<<arr1[min_index]<<" "<<arr2[index2[min_index]]<<'\n';
        index2[min_index]++;
        k--;
    }
}
int main()
{
    int i;
    fin>>n>>m>>k;
    for(i=0;i<n;i++)
        fin>>a[i];
    for(i=0;i<m;i++)
        fin>>b[i];
    cmmp(a,n,b,m,k);
    return 0;
}
Comentarii

S-ar putea sa iti placa