Buna ! Am rezolvat problema #250 de pe pbinfo si am obtinut 0 puncte.
Aici este rezolvarea mea:
https://pastebin.com/JePfqecJ
Cum as putea sa o fac corect si mai eficienta pt ca la ultima testare am primit "limita de timp depasita".
Cand am rezolvat problema nu am luat in considerare situatia in care elementele din siruri sa se repete pt ca spune ca sirurile sunt ordonate crescator .
Multumesc !
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
bitset<1000001>a;
int main()
{
ifstream f("interclasare1.in");
ofstream g("interclasare1.out");
int n, m, i, num, k=0;
f >> n ;
for (i=1; i<=n; ++i)
{
f>> num; a[num]=1;
}
f >> m;
for (i=1; i<=m; ++i)
{
f >> num; a[num]=1;
}
for (i=0; i<=1000000; ++i)
{
if (a[i]==1)
{
++k; if (k%10) g<< i << " ";
else g<< i << "\n";
}
}
return 0;
}
Explicație:
#include <bits/stdc++.h>
using namespace std;
ifstream fin("interclasare1.in");
ofstream fout("interclasare1.out");
int n, m, a[100002], b[100002], c[200004];
int main() {
fin >> n;
for (int i = 1; i <= n; i++)
fin >> a[i];
fin >> m;
for (int i = 1; i <= m; i++)
fin >> b[i];
int i = 1, j = 1, k = 1;
while (i <= n && j <= m) {
if (a[i] < b[j]) {
c[k++] = a[i++];
}
else {
if (a[i] > b[j]) {
c[k++] = b[j++];}
else ++i;
}
}
while(i <= n)
c[k ++] = a[i ++];
while(j <= m)
c[k ++] = b[j ++];
for (int i = 1; i < k; i++) {
fout << c[i] << " ";
if (i % 10 == 0)
fout << endl;
}
}
prima... cu bitset ... cu un cod mai scurt
a doua ... clasica la interclasare