Se dă un şir de N
numere naturale. Din acest şir, putem forma un şir comprimat de forma: a[1]
, b[1]
, a[2]
, b[2]
, …, a[x]
, b[x]
, din care înţelegem că numărul a[1]
apare pe primele b[1]
poziţii, a[2]
apare pe următoarele b[2]
poziţii…, iar a[x]
apare pe ultimele b[x]
poziţii.
De exemplu, dacă şirul dat este 1 1 5 5 5 2
, atunci şirul comprimat va fi 1 2 5 3 2 1
.
Cerința
Să se determine:
a) Lungimea celei mai lungi secvenţe formată din numere egale.
Se dă un şir de N
numere naturale. Din acest şir, putem forma un şir comprimat de forma: a[1]
, b[1]
, a[2]
, b[2]
, …, a[x]
, b[x]
, din care înţelegem că numărul a[1]
apare pe primele b[1]
poziţii, a[2]
apare pe următoarele b[2]
poziţii…, iar a[x]
apare pe ultimele b[x]
poziţii.
De exemplu, dacă şirul dat este 1 1 5 5 5 2
, atunci şirul comprimat va fi 1 2 5 3 2 1
.
Cerința
Să se determine:
a) Lungimea celei mai lungi secvenţe formată din numere egale.
b) Şirul comprimat pentru şirul dat.
Date de intrare
Fișierul de intrare sir6.in
conține pe prima linie numerele P
şi N
. Pe următoarea linie se găseşte un şir format din N
numere naturale.
Date de ieșire
Fișierul de ieșire sir6.out
va conține pe prima linie:
a) Dacă P
este 1
, lungimea celei mai lungi secvenţe, reprezentând răspunsul la cerinţa a).
b) Dacă P
este 2
, şirul comprimat, reprezentând răspunsul la cerinţa b).
Restricții și precizări
N <= 100 000
- Numerele din şir nu depăşesc
1 000 000
. P
este1
sau2
.
Exemplul 1
sir6.in
1 6 1 1 5 5 5 2
sir6.out
3
Explicație
Pentru acest test P = 1
, deci se va rezolva doar cerinţa a). Secvenţa cea mai lungă formată din numere egale este: 5 5 5
şi are lungimea 3
.
Exemplul 2
sir6.in
2 6 1 1 5 5 5 2
sir6.out
1 2 5 3 2 1
Explicație
Pentru acest test P = 2
, deci se va rezolva doar cerinţa b). Numărul 1
apare de 2
ori, numărul 5
apare de 3
ori, iar numărul 2
apare o singură dată. Prin urmare, şirul comprimat este 1 2 5 3 2 1
.
#include <bits/stdc++.h> using namespace std; ifstream cin("sir6.in"); ofstream cout("sir6.out"); int main() { int c , n , a[100001] , l = 0 , lmax = 0; cin >> c >> n; for(int i = 0 ; i < n ; ++i) cin >> a[i]; if(c == 1) { for(int i = 0 ; i < n ; ++i) { if(a[i] == a[i+1]) l++; if(l > lmax)lmax = l; if(a[i] != a[i+1]) l = 0; } cout << lmax+1; } if(c == 2) { int i = 0 , cnt = 0; for(i = 0 ; i < n ; ++i) { while(a[i] == a[i+1]) cnt++ , i++; cout << a[i] << " " << cnt+1<< " "; cnt = 0; } } }