Rezolvare completă PbInfo #1063 Arme

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 pbi (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 pcj.

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 pb1 pb2pbN reprezentând în ordine puterile armelor pe care Vasile le are la brâu. Pe a treia linie se află M numere naturale pc1 pc2pcM 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 Adresa de email.

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!