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 pb2 … pbN reprezentând în ordine puterile armelor pe care Vasile le are la brâu. Pe a treia linie se află M numere naturale pc1 pc2 … pcM 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!