#include <iostream> #include <algorithm> #include <cmath> using namespace std; int n,dl,roznica,ile,dl1; int tab[200000][18],tab1[200000][18]; long long liczba,wynik,maksimum,liczba1,nr; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for(int i = 0; i < n; i++){ cin >> liczba; dl = 0; ile = 0; nr = 0; dl1 = 0; if(liczba > maksimum){ maksimum = liczba; } else if(liczba == maksimum){ wynik++; maksimum *= 10; } else{ while(maksimum){ tab[i][dl] = maksimum % 10; dl++; maksimum /= 10; } dl1 = dl;///ZAPASOWA DLUGOSC NA POTEM liczba1 = liczba; while(liczba){///LICZY ILE MA CYFR liczba /= 10; ile++; } roznica = dl - ile; for(int j = roznica; liczba1 > 0; j++){///zapisanie cyfr liczby tab1[i][j] = liczba1 % 10; liczba1 /= 10; } dl--; for(; dl >= 0; dl--){///DO SPRAWDZENIA CZY DL - 1 MA BYc! if(tab[i][dl] >= tab1[i][dl] && tab[i][dl] != 9 && dl < roznica){ nr = dl; tab1[i][dl] = tab[i][dl]; dl--; while(dl > -1 && tab[i][dl] >= tab1[i][dl] && tab[i][dl] != 9){ nr = dl; tab1[i][dl] = tab[i][dl]; dl--; } tab1[i][nr]++; nr--; for(int k = nr; k >= 0; k--) tab1[i][k] = 0; wynik += roznica; for(int s = 0; s < dl1; s++) maksimum += tab1[i][s] * pow(10,s); } else if(tab[i][dl] > tab1[i][dl] && dl1 >= roznica){//mnoznik * 10,,///PRAWDOPODOBNIE BEDZIE MOZNA USUNAC IFA I DAC SAMO ELSE maksimum = 0; wynik += roznica + 1; for(int mnoznik = 1; mnoznik <= dl1; mnoznik++) maksimum += tab1[i][mnoznik-1] * pow(10,mnoznik); break; } } } } cout << wynik; 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 | #include <iostream> #include <algorithm> #include <cmath> using namespace std; int n,dl,roznica,ile,dl1; int tab[200000][18],tab1[200000][18]; long long liczba,wynik,maksimum,liczba1,nr; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for(int i = 0; i < n; i++){ cin >> liczba; dl = 0; ile = 0; nr = 0; dl1 = 0; if(liczba > maksimum){ maksimum = liczba; } else if(liczba == maksimum){ wynik++; maksimum *= 10; } else{ while(maksimum){ tab[i][dl] = maksimum % 10; dl++; maksimum /= 10; } dl1 = dl;///ZAPASOWA DLUGOSC NA POTEM liczba1 = liczba; while(liczba){///LICZY ILE MA CYFR liczba /= 10; ile++; } roznica = dl - ile; for(int j = roznica; liczba1 > 0; j++){///zapisanie cyfr liczby tab1[i][j] = liczba1 % 10; liczba1 /= 10; } dl--; for(; dl >= 0; dl--){///DO SPRAWDZENIA CZY DL - 1 MA BYc! if(tab[i][dl] >= tab1[i][dl] && tab[i][dl] != 9 && dl < roznica){ nr = dl; tab1[i][dl] = tab[i][dl]; dl--; while(dl > -1 && tab[i][dl] >= tab1[i][dl] && tab[i][dl] != 9){ nr = dl; tab1[i][dl] = tab[i][dl]; dl--; } tab1[i][nr]++; nr--; for(int k = nr; k >= 0; k--) tab1[i][k] = 0; wynik += roznica; for(int s = 0; s < dl1; s++) maksimum += tab1[i][s] * pow(10,s); } else if(tab[i][dl] > tab1[i][dl] && dl1 >= roznica){//mnoznik * 10,,///PRAWDOPODOBNIE BEDZIE MOZNA USUNAC IFA I DAC SAMO ELSE maksimum = 0; wynik += roznica + 1; for(int mnoznik = 1; mnoznik <= dl1; mnoznik++) maksimum += tab1[i][mnoznik-1] * pow(10,mnoznik); break; } } } } cout << wynik; return 0; } |