#include <cstdio>
#include <iostream>
// Marcin Regdos | Potyczki Algorytmiczne 2018 | Runda 2B KON Nowy kontrakt
using namespace std;
int main(){
long long result = 0;
int n = 0;
cin>> n ;
string s1, s2;
s1 = s2 = "";
while (n--)
{
s1 = s2;
cin >> s2;
//cout << result << " " << s1 << " " << s2 << endl;
if (s1.size() < s2.size()) continue;
if (s2.size() == s1.size())
{
if (s1 < s2) continue;
s2.append("0");
++result;
continue;
}
string s1Pref = s1.substr (0, s2.size());
int s2ol = s2.size();
if (s1Pref > s2)
{
// must add a lot of 0
int t = (s1.size() - s2.size() + 1);
result += t;
while (t--) s2.append("0");
continue;
}
if (s1Pref == s2)
{
int t = (s1.size() - s2.size());
result += t;
s2 = s1;
int i;
for (i = s2.size() - 1; i>= s2ol && s2[i] == '9'; --i);
if (i>=s2ol)
{
char c = s2[i];
s2[i] = ++c;
} else
{
++result; s2.append("0");
}
//cout << "x: " << result << " " << s1Pref << " " << i << " " << s2 << endl;
continue;
}
else
{
int t = (s1.size() - s2.size());
result += t;
while (t--) s2.append("0");
}
}
cout << result << endl;
return 0;
}
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 | #include <cstdio> #include <iostream> // Marcin Regdos | Potyczki Algorytmiczne 2018 | Runda 2B KON Nowy kontrakt using namespace std; int main(){ long long result = 0; int n = 0; cin>> n ; string s1, s2; s1 = s2 = ""; while (n--) { s1 = s2; cin >> s2; //cout << result << " " << s1 << " " << s2 << endl; if (s1.size() < s2.size()) continue; if (s2.size() == s1.size()) { if (s1 < s2) continue; s2.append("0"); ++result; continue; } string s1Pref = s1.substr (0, s2.size()); int s2ol = s2.size(); if (s1Pref > s2) { // must add a lot of 0 int t = (s1.size() - s2.size() + 1); result += t; while (t--) s2.append("0"); continue; } if (s1Pref == s2) { int t = (s1.size() - s2.size()); result += t; s2 = s1; int i; for (i = s2.size() - 1; i>= s2ol && s2[i] == '9'; --i); if (i>=s2ol) { char c = s2[i]; s2[i] = ++c; } else { ++result; s2.append("0"); } //cout << "x: " << result << " " << s1Pref << " " << i << " " << s2 << endl; continue; } else { int t = (s1.size() - s2.size()); result += t; while (t--) s2.append("0"); } } cout << result << endl; return 0; } |
English