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; }