👤

Fișierul bac.in conține pe prima linie două numere naturale din intervalul [2,104], m și
n, iar pe fiecare dintre următoarele două linii câte un șir de m, respectiv n numere naturale
din intervalul [0,109], ordonate strict crescător. Numerele aflate pe aceeași linie a
fișierului sunt separate prin câte un spațiu.
Se cere să se afișeze pe ecran, în ordine strict descrescătoare, numerele pare care apar
în cel puțin unul dintre cele două șiruri. Numerele afișate sunt separate prin câte un spațiu,
iar dacă nu există niciun astfel de număr, se afișează pe ecran mesajul nu exista.
Pentru determinarea numerelor cerute se va utiliza un algoritm eficient din punctul de
vedere al timpului de executare.
Exemplu: dacă fișierul conține numerele
5 6
1 4 8 9 10
2 4 10 12 15 18
se afișează pe ecran
18 12 10 8 4 2
a) Descrieți în limbaj natural algoritmul utilizat, justificând eficiența acestuia
b) Scrieţi programul C/C++ corespunzător algoritmului descris.


Răspuns :

la a) poti scrie despre complexitatea liniara a algoritmului.
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bac.in");
int v[1001],x[1001],i,j,m,n,ok;
int main()
{
    fin>>m>>n;
    for (i=1;i<=m;i++)
        fin>>v[i];
    for (i=1;i<=n;i++)
        fin>>x[i];
    i=m;
    j=n;
    while (i && j)
    {
        if (v[i]==x[j] && v[i]%2==0)
        {
            ok=1;
            cout<<v[i]<<" ";
            i--; j--;
        }
        else
        {
            if (v[i]>x[j])
            {
                if (v[i]%2==0)
                {
                    ok=1;
                    cout<<v[i]<<" ";
                }
                i--;
            }
            else
            {
                if (x[j]%2==0)
                {
                    ok=1;
                    cout<<x[j]<<" ";
                }
                j--;
            }
        }
    }
    if (i && !j)
    {
        while (i)
        {
            if (v[i]%2==0)
            {
                ok=1;
                cout<<v[i]<<" ";
            }
            i--;
        }
    }
    else
    {
         while (j)
        {
            if (x[j]%2==0)
            {
                ok=1;
                cout<<x[j]<<" ";
            }
            i--;
        }
    }

return 0;
}