#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; } |