不难发现取 1818 位有效数字一定能取到最优解,模拟即可。

#include <bits/stdc++.h>
using namespace std;
string a[1000012];
int b[1000012];
int main()
{
	ios::sync_with_stdio(0);
	int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 1; i <= n; i++)
    	b[i] = a[i].size();
    long long p = 0;
    for (int i = 2; i <= n; i++)
    {
        int u = b[i];
        int v = b[i - 1];
        if (u > v || u == v && a[i] > a[i - 1]) continue;
        if (a[i] > a[i - 1].substr(0, min(18, u)))
        {
            int g = v - u;
            p += g;
            for (int j = 1; j <= g; j++)
            {
                a[i] += '0';
                b[i]++;
                if (b[i] >= 18) break;
            }
            b[i] = u + g;
            continue;
        }
        if (a[i] < a[i - 1].substr(0, min(18, u)))
        {
            int g = v - u + 1;
            p += g;
            for (int j = 1; j <= g; j++)
            {
                a[i] += '0';
                b[i]++;
                if (b[i] >= 18) break;
            }
            b[i] = u + g;
            continue;
        }
        if (a[i] == a[i - 1].substr(0, u))
        {
            bool ok = true;
            for (int j = u; j <= min(17, v - 1); j++)
                if (a[i - 1][j] != '9') ok = false;
            if (v > 18) ok = false;
            int g = v - u;
            p += g;
            a[i] = a[i - 1];
            b[i] += g;
            if (!ok)
            {
                a[i][min(17, v - 1)]++;
                for (int j = min(17, v - 1); j >= 0; j--)
                {
                    if (a[i][j] > '9')
                    {
                        a[i][j] = '0';
                        a[i][j - 1]++;
                    }
                }
            }
            else
            {
            	b[i]++;
                p++;
                for (int j = u; j <= min(17, v - 1); j++)
                    a[i][j] = '0';
                if (v < 18) a[i] += '0';
            }
            continue;
        }
    }
    cout << p << endl;
	return 0;
}