Андрей придумал новый сжатия данных. Этот основан на достаточно простой идее — если подряд идет несколько одинаковых чисел, почему бы не записать их в виде пары , ? Ладно на самом деле не новый, но, как Андрей считает, достаточно эффективный. Давайте вместе с ним попробуем сжать заданный массив длины n, заменив все вхождения подряд идущих одинаковых чисел вышеуказанным образом. Разумеется, если рядом с числом нет равных ему, надо записать его как , 1. Входные данные В первой строке ввода задано число n — длина изначального массива (1⩽n⩽2⋅105). В следующей строке через пробел перечислены n чисел ai — содержимое массива (1⩽ai⩽109). Выходные данные В первой строке выведите k — количество блоков подряд идущих одинаковых чисел. В следующих k строках должны следовать через пробел пары a,c, где a — следующее число в массиве, а c — количество подряд идущих чисел a.
ИТМО пишете?
GNU C++
#include <iostream>
#include <vector>
using namespace std;
signed main() {
int N,k=0;
cin>>N;
int a[N];
vector<pair<int,int> >b;
for(int i=0;i<N;i++)
{
cin>>a[i];
}
int c = 1;
for(int i=1;i<N;i++)
{
if (a[i]==a[i-1])
{
c++;
}
else
{
b.push_back(make_pair(a[i-1],c));
c=1,k++;
}
}
b.push_back(make_pair(a[N-1],c));
cout<<k<<endl;
for(int i=0;i<b.size();i++)
{
cout<<b[i].first<<' '<<b[i].second<<endl;
}
return 0;
}