Răspuns :
Răspuns:
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("bac.txt");
int m,n,a[1000001],mini,i,j,ultim,x;
int main()
{
ultim=-1;
f>>m>>n;
for(i=1; i<=m; i++)
f>>a[i];
i=1;
j=1;// parcurg numerele de la 1 la n
f>>x;
while(i<=m and j<=n)
{
mini=min(x,a[i]);
if(ultim==-1)
{
cout<<mini<<" ";
ultim=mini;
}
else if(ultim%2!=mini%2)
{
cout<<mini<<" ";
ultim=mini;
}
if(x==mini and a[i]==mini)
{
i++,j++;
f>>x;
}
else if(x!=mini and a[i]==mini)
i++;
else
{
j++;
f>>x;
}
}
while(i<=m)
{
if(ultim%2!=a[i]%2)
{
cout<<a[i]<<" ";
ultim=a[i];
}
i++;
}
while(j<=n)
{
f>>x;
j++;
if(ultim%2!=x%2)
{
cout<<x<<" ";
ultim=x;
}
}
return 0;
}
Explicație:
Algoritmul realizeaza interclasarea celor doua siruri de numere. Citesc mai intai m si n, apoi cele m elemente, pe care le memorez in a[1...m]. Citesc mai intai primul element din al doilea sir, dupa care dau drumul interclasarii. Realizez citirea unui nou element din al doilea sir doar daca este nevoie (de asta nu pot parcurge cu un for). Dpdv al timpului de executare, algoritmul este eficient, deoarece parcurge o singura data(de fapt parcurge primul sir de doua ori, o data la citire si dupa la interclasare) elementele din fisier==> complexitate liniara= O(2*m+n)
De asemenea, puteam sa realizez interclasarea normala, cu 2 sau chiar 3 vectori, deoarece se metioneaza ca este nevoie doar de eficienta ca timp. Insa nu este mare diferenta la cod.
Vă mulțumim că ați vizitat site-ul nostru web care acoperă despre Informatică. Sperăm că informațiile furnizate v-au fost utile. Nu ezitați să ne contactați dacă aveți întrebări sau aveți nevoie de asistență suplimentară. Ne vedem data viitoare și nu ratați să marcați.