//Zadanie "Nowy kontrakt", autor rozwiazania: Pawel Talar
#include <bits/stdc++.h>
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
string current, prev;
int t;
cin >> t;
t--;
long long res = 0;
cin >> prev;
while(t--)
{
cin >> current;
if(current.size() == prev.size())
{
//cout << prev.compare(current) << "\n";
if(prev >= current)
{
prev = current + '0';
res++;
}
else
{
prev = current;
}
}
else if(current.size() > prev.size())
{
prev = current;
}
else
{
int a = prev.size();
int b = current.size();
int k = a-b;
res += k;
bool is_the_same = true;
string temp;
for(int i = 0; i < b; i++)
{
temp += prev[i];
}
if(temp != current)
is_the_same = false;
if(is_the_same)
{
bool is_only_nines = true;
int last_non_nine;
for(int i = b; i < a; i++)
{
if(prev[i] != '9')
{
last_non_nine = i;
is_only_nines = false;
}
}
if(!is_only_nines)
{
for(int i = b; i < last_non_nine; i++)
{
current += prev[i];
}
current += (char)((int)prev[last_non_nine] + 1);
for(int i = last_non_nine+1; i < a; i++)
current += '0';
}
else
{
for(int i = b; i <= a; i++)
current += '0';
res++;
}
}
else if(temp < current)
{
for(int i = b; i < a; i++)
current += '0';
}
else
{
for(int i = b; i <= a; i++)
current += '0';
res++;
}
prev = current;
}
//cout << endl << prev << " " << res << endl;
//cout << res << "\n";
}
cout << res << "\n";
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 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 | //Zadanie "Nowy kontrakt", autor rozwiazania: Pawel Talar #include <bits/stdc++.h> using namespace std; int main() { std::ios::sync_with_stdio(false); string current, prev; int t; cin >> t; t--; long long res = 0; cin >> prev; while(t--) { cin >> current; if(current.size() == prev.size()) { //cout << prev.compare(current) << "\n"; if(prev >= current) { prev = current + '0'; res++; } else { prev = current; } } else if(current.size() > prev.size()) { prev = current; } else { int a = prev.size(); int b = current.size(); int k = a-b; res += k; bool is_the_same = true; string temp; for(int i = 0; i < b; i++) { temp += prev[i]; } if(temp != current) is_the_same = false; if(is_the_same) { bool is_only_nines = true; int last_non_nine; for(int i = b; i < a; i++) { if(prev[i] != '9') { last_non_nine = i; is_only_nines = false; } } if(!is_only_nines) { for(int i = b; i < last_non_nine; i++) { current += prev[i]; } current += (char)((int)prev[last_non_nine] + 1); for(int i = last_non_nine+1; i < a; i++) current += '0'; } else { for(int i = b; i <= a; i++) current += '0'; res++; } } else if(temp < current) { for(int i = b; i < a; i++) current += '0'; } else { for(int i = b; i <= a; i++) current += '0'; res++; } prev = current; } //cout << endl << prev << " " << res << endl; //cout << res << "\n"; } cout << res << "\n"; return 0; } |
English