#include<iostream> #define MAX 200002 #define LL unsigned long long using namespace std; int d=0,ileDodano=0; LL tab[MAX]; int len(LL a, LL *tab){ if (a>0){ len(a/10,tab); tab[d] = a%10; d++; } return d; } int policz(LL a,LL b){ LL tabA[20]={-1},tabB[20]={-1}; int dA, dB,ile=0; d=0; dA = len(a,tabA); d=0; dB = len(b,tabB); if (dA==dB) {ileDodano++; b*=10; return b;} int i=0; while (tabA[i]==tabB[i] && i<dB) i++; if (i==dB){ for (int j=i;j<dA;j++){ if (tabA[j]<9) { b=a+1; ileDodano+=(dA-dB); return b; } } for (int j=i;j<dA+1;j++) b=b*10; ileDodano+=(dA-dB)+1; return b; } ile= dA-i-1; if (tabA[i]>tabB[i]){ ile++; } for(int i=0;i<ile;i++) b=b*10; ileDodano+=ile; return b; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; LL tab[MAX],d1,d2; cin >>n; //cin >>tab[0]>>tab[1]; //cout <<policz(tab[0],tab[1])<<endl; // cout <<ileDodano<<endl; cin >>tab[0]; for (int i=1;i<n;i++){ cin >>tab[i]; if (tab[i-1]==tab[i]){ ileDodano++; tab[i]*=10; } else if (tab[i-1]>tab[i]){ tab[i]=policz(tab[i-1],tab[i]); } } //for(int i=0;i<n;i++)cout <<tab[i]<<" "; cout <<ileDodano<<endl; }
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 | #include<iostream> #define MAX 200002 #define LL unsigned long long using namespace std; int d=0,ileDodano=0; LL tab[MAX]; int len(LL a, LL *tab){ if (a>0){ len(a/10,tab); tab[d] = a%10; d++; } return d; } int policz(LL a,LL b){ LL tabA[20]={-1},tabB[20]={-1}; int dA, dB,ile=0; d=0; dA = len(a,tabA); d=0; dB = len(b,tabB); if (dA==dB) {ileDodano++; b*=10; return b;} int i=0; while (tabA[i]==tabB[i] && i<dB) i++; if (i==dB){ for (int j=i;j<dA;j++){ if (tabA[j]<9) { b=a+1; ileDodano+=(dA-dB); return b; } } for (int j=i;j<dA+1;j++) b=b*10; ileDodano+=(dA-dB)+1; return b; } ile= dA-i-1; if (tabA[i]>tabB[i]){ ile++; } for(int i=0;i<ile;i++) b=b*10; ileDodano+=ile; return b; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; LL tab[MAX],d1,d2; cin >>n; //cin >>tab[0]>>tab[1]; //cout <<policz(tab[0],tab[1])<<endl; // cout <<ileDodano<<endl; cin >>tab[0]; for (int i=1;i<n;i++){ cin >>tab[i]; if (tab[i-1]==tab[i]){ ileDodano++; tab[i]*=10; } else if (tab[i-1]>tab[i]){ tab[i]=policz(tab[i-1],tab[i]); } } //for(int i=0;i<n;i++)cout <<tab[i]<<" "; cout <<ileDodano<<endl; } |