Vasile joacă (din nou!) jocul său preferat cu împuşcături. Personajul său are la brâu N
arme, aşezate în N
huse speciale, numerotate de la 1
la N
. Arma din husa i
are puterea pb
i
(1≤i≤N
).
În camera armelor a găsit M
arme, aşezate pe perete, în M
locaţii, numerotate de la 1
la M
. Pentru fiecare armă j
(1≤j≤M
) este cunoscută puterea sa pc
j
.
Vasile poate înlocui arme pe care le are la brâu cu arme aflate pe perete în camera armelor. La o înlocuire el ia arma de pe perete din locaţia j
(1≤j≤M
) şi o pune la brâu în husa i
(1≤i≤N
), iar arma din husa i
o pune pe perete în locaţia j
.
Cerinţă
Scrieţi un program care să determine suma maximă a puterilor armelor pe care le va avea la brâu Vasile după efectuarea înlocuirilor.
Date de intrare
Fișierul de intrare arme.in
conține pe prima linie numerele naturale N M
, reprezentând numărul de arme pe care le are la brâu, respectiv numărul de arme aflate în camera armelor. Pe a doua linie se află N
numere naturale pb
1
pb
2
… pb
N
reprezentând în ordine puterile armelor pe care Vasile le are la brâu. Pe a treia linie se află M
numere naturale pc
1
pc
2
… pc
M
reprezentând în ordine puterile armelor aflate în camera armelor. Numerele scrise pe aceeaşi linie sunt separate prin spaţiu.
Date de ieșire
Fișierul de ieșire arme.out
va conține o singură linie pe care va fi scrisă suma maximă a puterilor armelor de la brâul lui Vasile, după efectuarea înlocuirilor.
Restricții și precizări
1 ≤ N, M ≤ 1000
- Puterile armelor sunt numere naturale
≤10000
.
Exemplu
arme.in
3 2 3 1 7 4 5
arme.out
16
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 Arme:
//Emanuela Cerchez
#include <fstream>
#define InFile "arme.in"
#define OutFile "arme.out"
#define NMAX 1001
using namespace std;
struct arma {short int nr, p;} b[NMAX], c[NMAX], mut[NMAX];
short int N, M, cate;
long int smax;
char T[10][10];
char s[100];
void citire();
void afisare();
void sortare(arma[], short int);
long int suma();
int main()
{
citire();
sortare(b,N);
sortare(c,M);
smax=suma();
afisare();
return 0;
}
void citire()
{
int i;
ifstream fin(InFile);
fin>>N>>M;
for (i=1; i<=N; i++)
{fin>>b[i].p; b[i].nr=i;}
for (i=1; i<=M; i++)
{fin>>c[i].p; c[i].nr=i;}
}
void sortare(arma b[NMAX], short int N)
{
short int i, sch;
arma aux;
do{
sch=0;
for (i=1; i<N; i++)
if (b[i].p>b[i+1].p)
{aux=b[i]; b[i]=b[i+1]; b[i+1]=aux; sch=1;}
}
while (sch);
}
long int suma()
{
short int i, j, aux;
long int s=0;
cate=0;
for (i=1, j=M; i<=N && j>0;i++, j--)
if (b[i].p<c[j].p)
{
aux=b[i].p; b[i].p=c[j].p; c[j].p=aux;
mut[cate].nr=i; mut[cate].p=j; cate++;
}
else
break;
for (i=1; i<=N; i++) s+=b[i].p;
return s;
}
void afisare()
{
ofstream fout(OutFile);
fout<<smax<<'\n';
/*
fout<<cate<<'\n';
for (i=0; i<cate; i++)
fout<<mut[i].nr<<' '<<mut[i].p<<'\n';
*/
fout.close();
}
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 #1063 Arme
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1063 Arme 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!