Андрей придумал новый сжатия данных. Этот основан на достаточно простой идее — если подряд идет несколько одинаковых чисел, почему бы не записать их в виде пары , ? Ладно на самом деле не новый, но, как Андрей считает, достаточно эффективный. Давайте вместе с ним попробуем сжать заданный массив длины n, заменив все вхождения подряд идущих одинаковых чисел вышеуказанным образом. Разумеется, если рядом с числом нет равных ему, надо записать его как , 1. Входные данные В первой строке ввода задано число n — длина изначального массива (1⩽n⩽2⋅105). В следующей строке через пробел перечислены n чисел ai — содержимое массива (1⩽ai⩽109). Выходные данные В первой строке выведите k — количество блоков подряд идущих одинаковых чисел. В следующих k строках должны следовать через пробел пары a,c, где a — следующее число в массиве, а c — количество подряд идущих чисел a.

adeka088 adeka088    3   13.09.2020 07:51    8

Ответы
matisina48 matisina48  13.09.2020 08:01

ИТМО пишете?

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;

}

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика