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
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Kminsum:
# 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;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2087 Kminsum
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2087 Kminsum de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!