Problema #242 interclasM de pe pbinfo pls:
Cerința
Se dă un număr natural x și două șiruri a și b, cu n, respectiv m elemente, numere naturale, ordonate strict crescător. Să se afișeze, în ordine crescătoare, multiplii lui x care se află doar în unul dintre cele două șiruri.
Date de intrare
Fișierul de intrare interclasm.in conține pe prima linie numărul x, pe linia a doua numărul n; urmează n numere naturale, ordonate crescător, ce pot fi dispuse pe mai multe linii. Linia următoare conține numărul m și urmează m numere naturale, ordonate crescător, ce pot fi dispuse pe mai multe linii.
Date de ieșire
Fișierul de ieșire interclasm.out va conține pe prima linie valorile determinate, separate printr-un spațiu.
Restricții și precizări
0 < x < 1.000.000
1 ≤ n, m ≤ 100.000
valorile elementelor celor două șiruri vor fi mai mici decât 1.000.000
Exemplu
interclasm.in
5
7
1 2 3 4
7 20 60
9
3 5 7
8 9 10 12
20 24
interclasm.out
5 10 60
Răspunsuri la întrebare
Răspuns:
#include <iomanip>
#include <fstream>
#include <iostream>
#include <cassert>
using namespace std;
ifstream fin("interclasm.in");
ofstream fout("interclasm.out");
int a[100005],n, b[100005], m, c[200005], k;
int main(){
int x;
fin >> x;
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 = 0;
while(i<=n && j<=m)
if(a[i]<b[j])
if(a[i]%x == 0)
c[++k] = a[i] , i++;
else
i++;
else
if(a[i]>b[j])
if(b[j]%x == 0)
c[++k] = b[j] , j++;
else
j++;
else
i++, j++;
if(i<=n)
while(i<=n)
if(a[i]%x == 0)
c[++k] = a[i] , i++;
else
i++;
else
while(j<=m)
if(b[j]%x == 0)
c[++k] = b[j] , j++;
else
j++;
for(int i=1;i<=k;++i)
{
fout << c[i] << " ";
}
return 0;
}
Explicație:
Răspuns:
Explicație:
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
bitset<1000000>a;
int main()
{
ifstream f("interclasm.in");
ofstream g("interclasm.out");
int x, n, m, i, num;
f>>x>>n;
for (i=1; i<=n; ++i)
{
f >> num; a[num]=1;
}
f >> m;
for (i=1; i<=m; ++i)
{
f >> num;
if (a[num]) a[num]=0;
else a[num]=1;
}
for (i=1; i<1000000; ++i)
if (a[i] && i%x==0)
g << i << " ";
}