# PBinfo #1063 – Arme – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

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 ≤ 10.000.

Exemplu:
arme.in

3 2
3 1 7
4 5
arme.out

16

## Cod sursă C++

```cpp
//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();
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1063)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1063/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1063/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
