#include <bits/stdc++.h>
using namespace std;
#define DEBUG if(true)
bool f;
long long n,la=0,ls=0,w=0,z=0,e=0,p,h;
char a[10],s[200011];
void showS() {
for (long long i=ls-1; i>=z; --i) cout << s[i];
for (long long i=z-1; i>=0; --i) cout << s[i];
//for (long long i=z-1; i>=0; --i) cout << "-";
}
int main() {
scanf("%lld",&n);
for (long long q=0; q<n; ++q) {
scanf("%s",a);
la=strlen(a); reverse(a,a+la);
if (la>ls) {strcpy(s,a); ls=la;}
else {
p=ls-la; f=false;
for (long long j=la-1; j>=0; --j) {
if (s[p+j]>a[j]) {s[p]='0'; ++p; ++ls; f=true; e=0; break;}
else if (s[p+j]<a[j]) {f=true; e=0; break;}
}
w+=p;
if (f) {
e=0;
z=p; for (long long i=p,j=0; j<la; ++i,++j) s[i]=a[j];
} else {
for (h=0; true; ++h) {
if (e<h&&h<z) s[h]='0';
if (s[h]=='9'&&h<p) s[h]='0';
else break;
}
if (h>=e) {++e;}
if (h>=p) {s[h]='0'; ++ls; ++w; e=0; for (long long i=p+1,j=0; j<la; ++i,++j) s[i]=a[j];}
else if (e<h&&h<z) {s[h]='1';}
else {if (s[h]==0) {s[h]='1';} else {++s[h];}}
}
}
}
printf("%lld\n",w);
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 | #include <bits/stdc++.h> using namespace std; #define DEBUG if(true) bool f; long long n,la=0,ls=0,w=0,z=0,e=0,p,h; char a[10],s[200011]; void showS() { for (long long i=ls-1; i>=z; --i) cout << s[i]; for (long long i=z-1; i>=0; --i) cout << s[i]; //for (long long i=z-1; i>=0; --i) cout << "-"; } int main() { scanf("%lld",&n); for (long long q=0; q<n; ++q) { scanf("%s",a); la=strlen(a); reverse(a,a+la); if (la>ls) {strcpy(s,a); ls=la;} else { p=ls-la; f=false; for (long long j=la-1; j>=0; --j) { if (s[p+j]>a[j]) {s[p]='0'; ++p; ++ls; f=true; e=0; break;} else if (s[p+j]<a[j]) {f=true; e=0; break;} } w+=p; if (f) { e=0; z=p; for (long long i=p,j=0; j<la; ++i,++j) s[i]=a[j]; } else { for (h=0; true; ++h) { if (e<h&&h<z) s[h]='0'; if (s[h]=='9'&&h<p) s[h]='0'; else break; } if (h>=e) {++e;} if (h>=p) {s[h]='0'; ++ls; ++w; e=0; for (long long i=p+1,j=0; j<la; ++i,++j) s[i]=a[j];} else if (e<h&&h<z) {s[h]='1';} else {if (s[h]==0) {s[h]='1';} else {++s[h];}} } } } printf("%lld\n",w); return 0; } |
English