fbpx

Problema #1439 – Sir6 – Rezolvari PBInfo

de Mihai-Alexandru

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 este 1 sau 2.

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;
        }
    }
}
Comentarii

S-ar putea sa iti placa