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.
Răspunsuri la întrebare
Răspuns de
6
#include <bits/stdc++.h>
using namespace std;
int v[100005], n, x, y, nr = 1, i, p, k, lmax;
int main()
{
ifstream f("sir6.in");
ofstream g("sir6.out");
f >> p >> n;
if(n == 1) lmax = 1;
f >> y;
v[++ k] = y;
for(i = 2; i <= n; i ++)
{
f >> x;
if(x == y)
{
nr ++;
if(nr > lmax) lmax = nr;
}
else
{
v[++ k] = nr;
v[++ k] = x;
nr = 1;
}
y = x;
}
v[++ k] = nr;
if(p == 1) g << lmax;
if(p == 2)
{
for(i = 1; i <= k; i ++)
g << v[i] << " ";
}
return 0;
}
using namespace std;
int v[100005], n, x, y, nr = 1, i, p, k, lmax;
int main()
{
ifstream f("sir6.in");
ofstream g("sir6.out");
f >> p >> n;
if(n == 1) lmax = 1;
f >> y;
v[++ k] = y;
for(i = 2; i <= n; i ++)
{
f >> x;
if(x == y)
{
nr ++;
if(nr > lmax) lmax = nr;
}
else
{
v[++ k] = nr;
v[++ k] = x;
nr = 1;
}
y = x;
}
v[++ k] = nr;
if(p == 1) g << lmax;
if(p == 2)
{
for(i = 1; i <= k; i ++)
g << v[i] << " ";
}
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Chimie,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă