Cerința
Se dă un șir de cel mult un milion de numere naturale din intervalul [0,10
2
]
. Se cere să se determine toate perechile distincte formate din termeni ai șirului dat, x
și y
(y-x≥2
), astfel încât să nu existe niciun termen al șirului care să aparțină intervalului (x,y)
. Dacă nu există nicio astfel de pereche, se afișează mesajul nu exista
.
Date de intrare
Fișierul de intrare intervale5.in
conține pe prima linie elementele șirului, separate prin spații.
Date de ieșire
Fișierul de ieșire intervale5.out
va conține perechile găsite, câte una pe linie, în ordine strict crescătoare, separate printr-un spațiu, iar dacă nu există nicio astfel de pereche, se afișează mesajul nu exista
.
Restricții și precizări
- pentru determinarea numerelor cerute utilizați un algoritm eficient din punctul de vedere al timpului de executare: recomandă evitarea memorării elementelor șirului într-un tablou sau în altă structură de date similară;
Exemplu
intervale5.in
5 9 0 8 10 11 12 13 15 14 6 7 40 10 0 0 5 41 95 7
intervale5.out
0 5 15 40 41 95
#include <bits/stdc++.h> using namespace std; ifstream cin("intervale5.in"); ofstream cout("intervale5.out"); int f[101]; int main() { int x; int maxi=-1; while(cin >> x) { f[x]=1; if(x > maxi) maxi = x; } int cnt = 0; for(int i = 0 ; i <= maxi - 2 ; ++i) { for(int j = i + 2 ; j <= maxi ; ++j) { bool ok = true; for(int k = i + 1 ; k < j ; ++k) if(f[k]==1) ok=false; if(ok && f[i]==1 && f[j]==1) cout << i << ' ' << j << endl , cnt++; } } if(!cnt) cout << "nu exista"; return 0; }