1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 5;
int n, a[N];
string b[N];

int main()
{
  scanf("%d", &n);
  for (int i = 1; i <= n; i++)
  {
    scanf("%d", &a[i]);
    b[i] = to_string(a[i]);
    //printf("%s\n", b[i].c_str());
  }

  string act = b[1];
  int dod = 0;
  long long result = 0;
  for (int i = 2; i <= n; i++)
  {
    while ((int) act.size() > 20)
    {
      dod++;
      act.pop_back();
    }
    //printf("%s %d\n>%s\n", act.c_str(), dod, b[i].c_str());
    int poz = -1;
    for (int j = 0; j < (int) min(act.size(), b[i].size()); j++)
      if (b[i][j] != act[j])
      {
        poz = j; 
        break;
      } 

    if (dod == 0)
    {
      if ((int) b[i].size() > (int) act.size())
      {
        act = b[i];
        continue;
      }
      if (b[i][poz] > act[poz])
      {
        while ((int) b[i].size() < (int) act.size())
        {
          b[i] += '0';
          result++;
        }
        act = b[i];
        continue;
      }
      if (b[i][poz] < act[poz])
      {
        while ((int) b[i].size() <= (int) act.size())
        {
          b[i] += '0';
          result++;
        }
        act = b[i];
        continue;
      }
      bool nie_dziewiec = false;
      for (int j = (int) b[i].size(); j < (int) act.size(); j++)
        if (act[j] != '9')
          nie_dziewiec = true;
      if (nie_dziewiec)
      {
        result += -(int)b[i].size()+(int)act.size();
        act[(int) act.size() - 1]++;
        for (int j = (int) act.size() - 1; j >= 0; j--)
          if (act[j] > '9')
          {
            act[j] -= 10;
            act[j-1]++;
          }
        continue;
      }
      else
      {
        while ((int) b[i].size() <= (int) act.size())
        {
          b[i] += '0';
          result++;
        }
        act = b[i];
        continue;
      }
    }
    else
    {
      int len = (int) act.size() + dod;
      if (poz != -1 && b[i][poz] < act[poz])
      {
        len++;
        result += len - (int) b[i].size();
        while ((int) b[i].size() < (int) act.size())
          b[i] += '0';
        act = b[i];
        dod = len - (int) b[i].size();
      }
      if (poz != -1 && b[i][poz] > act[poz])
      {
        result += len - (int) b[i].size();
        while ((int) b[i].size() < (int) act.size())
          b[i] += '0';
        act = b[i];
        dod = len - (int) b[i].size();
      }
      if (poz == -1)
      {
        result += len - (int) b[i].size();
        for (int j = (int) b[i].size(); j < (int) act.size(); j++)
          b[i] += act[j];
        act = b[i];
        dod = len - (int) b[i].size();
      }
    }
  }
  
  printf("%lld\n", result);

  return 0;
}