David a învățat de curând la școală ce înseamnă o mulțime de numere naturale și ce operații se pot face pe mulțimi. Printre operațiile învățate, lui David i s-au părut interesante operația de reuniune a două mulțimi și operația de intersecție a două mulțimi, așa că el, fiind pasionat de informatică, s-a gândit să implementeze cele două operații pentru două mulțimi. Mulțimile sunt formate din numere consecutive. Prima mulțime este formată din N
numere naturale consecutive și începe cu P1
, respectiv a doua mulțime este formată din M
numere naturale și începe cu P2
.
Cerința
Cunoscând N
, P1
, M
și P2
se cere:
a) Să se afișeze reuniunea celor două mulțimi.
b) Să se afișeze intersecția celor două mulțimi.
Date de intrare
Fişierul de intrare multimi2.in
conţine pe prima linie un număr natural p
. Pentru toate testele de intrare, numărul p
poate avea doar valoarea 1
sau valoarea 2
. Pe a doua linie se află patru numere naturale N
, P1
, M
și P2
cu semnificația din enunț.
Date de ieșire
Dacă valoarea lui p
este 1
, se va rezolva numai punctul a) din cerință. În acest caz, în fişierul de ieşire multimi2.out
se va scrie reuniunea celor două mulțimi.
Dacă valoarea lui p
este 2
, se va rezolva numai punctul b) din cerință. În acest caz, în fișierul de ieșire multimi2.out
se va scrie intersecția celor două mulțimi.
Restricții și precizări
1 ≤ N, M ≤ 500000
1 ≤ P1, P2 ≤ 750000
- Pentru rezolvarea corectă a primei cerinţe se acordă
50
de puncte, iar pentru cerința a doua se acordă50
de puncte. - Elementele mulțimii din fișierul de ieșire se vor afişa în ordine crescătoare.
- Dacă mulţimea rezultată este vidă se va afişa
-1
.
Exemplul 1:
multimi2.in
1 3 4 3 5
multimi2.out
4 5 6 7
Explicație
p = 1
Prima mulțime este {4,5,6}
, iar a doua {5,6,7}
.
Reuniunea celor două mulțimi reprezintă elementele care aparțin cel puțin unei mulțimi.
Atenție! Pentru acest test se rezolvă doar cerința a).
Exemplul 2:
multimi2.in
2 3 4 3 5
multimi2.out
5 6
Explicație
p = 2
Prima mulțime este {4,5,6}
, iar a doua {5,6,7}
.
Intersecția celor două mulțimi reprezintă elementele comune.
Atenție! Pentru acest test se rezolvă doar cerința b).
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Multimi2:
#include<stdio.h>
#define min(a,b) (a)<(b) ? (a) : (b)
#define max(a,b) (a)>(b) ? (a) : (b)
int n,m,p1,p2,p,minim,maxim,i;
void swap(int &a,int &b){
int aux;
aux=a;
a=b;
b=aux;
}
int main(){
FILE *f,*g;
f=fopen("multimi2.in","r");
fscanf(f,"%d%d%d%d%d",&p,&n,&p1,&m,&p2);
fclose(f);
if(p1>p2){
swap(p1,p2);
swap(n,m);
}
g=fopen("multimi2.out","w");
if(p==2){
if(p2>p1+n-1)
fprintf(g,"-1
");
else{
minim=min(p1+n-1,p2+m-1);
for(i=p2;i<=minim;i++)
fprintf(g,"%d ",i);
}
}else{
if(p2>p1+n-1){
for(i=p1;i<=p1+n-1;i++)
fprintf(g,"%d ",i);
for(i=p2;i<=p2+m-1;i++)
fprintf(g,"%d ",i);
}else{
maxim=max(p1+n-1,p2+m-1);
for(i=p1;i<=maxim;i++)
fprintf(g,"%d ",i);
}
}
fclose(g);
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #622 Multimi2
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #622 Multimi2 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!