Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8.
Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
#include <iostream> #include <cmath> using namespace std; /* 15 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 */ int main() { int n; cin>>n; int x[n], d[n], newd[n], log; long long int licznik=-1, px, pom, current,wynik=0; for(int i=0; i<n; ++i) { cin>>x[i]; d[i] = log10(x[i])+1; newd[i] = d[i]; } current=d[0]; for(int i=1; i<n; ++i){ if(x[i]==x[i-1]){ if(d[i]==newd[i-1]){ //cout<<"H"<<endl; current++; wynik++; newd[i]++; licznik=1; } else{///n[i-1]>n[i] ogarnac z tym licznikiem if(licznik==0) licznik++; log=log10(licznik); if(log<current-d[i]){ wynik+=current-d[i]; newd[i]=current; } else{ licznik=0; current++; wynik+=current-d[i]; newd[i]=current; } //cout<<i<<": "<<licznik<<" "<<current<<" "<<wynik<<endl; licznik++; } } else if(x[i]>x[i-1]){ licznik=0; px=x[i]/(pow(10, d[i]-d[i-1])); //cout<<px<<endl; if(x[i-1]==px){ if(licznik=0) licznik++; pom=pow(10, d[i]-d[i-1]); if(x[i]%pom>=licznik){ licznik++; wynik+=current-d[i]; newd[i]=current; } else { licznik=0; current++; wynik+=current-d[i]; newd[i]=current; } } else if(x[i-1]<px){ //cout<<"AA"<<" "<<current<<endl; wynik+=current-d[i]; newd[i]=current; } else{ current++; wynik+=current-d[i]; newd[i]=current; } } else{ ///w tej sytuacji mamy albo (d[i]<=d[i-1]) i oczywi�cie x[i]<x[i-1] licznik=0; px=x[i-1]/(pow(10, (d[i-1]-d[i]))); //czyli n[i] pierwszych cyfr //cout<<px<<endl; if(x[i]==px){ pom=pow(10, d[i-1]-d[i]); licznik=x[i-1]%pom+1; //cout<<licznik<<endl; log=log10(licznik); if(log<current-d[i]){ wynik+=current-d[i]; newd[i]=current; } else{ current++; wynik+=current-d[i]; newd[i]=current; } licznik++; } else if(x[i]>px){ licznik=0; wynik+=current-d[i]; newd[i]=current; } else{ licznik=0; current++; wynik+=current-d[i]; //cout<<"A"<<wynik<<" "<<current<<endl; newd[i]=current; } } } cout<<wynik<<endl; 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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include <iostream> #include <cmath> using namespace std; /* 15 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 */ int main() { int n; cin>>n; int x[n], d[n], newd[n], log; long long int licznik=-1, px, pom, current,wynik=0; for(int i=0; i<n; ++i) { cin>>x[i]; d[i] = log10(x[i])+1; newd[i] = d[i]; } current=d[0]; for(int i=1; i<n; ++i){ if(x[i]==x[i-1]){ if(d[i]==newd[i-1]){ //cout<<"H"<<endl; current++; wynik++; newd[i]++; licznik=1; } else{///n[i-1]>n[i] ogarnac z tym licznikiem if(licznik==0) licznik++; log=log10(licznik); if(log<current-d[i]){ wynik+=current-d[i]; newd[i]=current; } else{ licznik=0; current++; wynik+=current-d[i]; newd[i]=current; } //cout<<i<<": "<<licznik<<" "<<current<<" "<<wynik<<endl; licznik++; } } else if(x[i]>x[i-1]){ licznik=0; px=x[i]/(pow(10, d[i]-d[i-1])); //cout<<px<<endl; if(x[i-1]==px){ if(licznik=0) licznik++; pom=pow(10, d[i]-d[i-1]); if(x[i]%pom>=licznik){ licznik++; wynik+=current-d[i]; newd[i]=current; } else { licznik=0; current++; wynik+=current-d[i]; newd[i]=current; } } else if(x[i-1]<px){ //cout<<"AA"<<" "<<current<<endl; wynik+=current-d[i]; newd[i]=current; } else{ current++; wynik+=current-d[i]; newd[i]=current; } } else{ ///w tej sytuacji mamy albo (d[i]<=d[i-1]) i oczywi�cie x[i]<x[i-1] licznik=0; px=x[i-1]/(pow(10, (d[i-1]-d[i]))); //czyli n[i] pierwszych cyfr //cout<<px<<endl; if(x[i]==px){ pom=pow(10, d[i-1]-d[i]); licznik=x[i-1]%pom+1; //cout<<licznik<<endl; log=log10(licznik); if(log<current-d[i]){ wynik+=current-d[i]; newd[i]=current; } else{ current++; wynik+=current-d[i]; newd[i]=current; } licznik++; } else if(x[i]>px){ licznik=0; wynik+=current-d[i]; newd[i]=current; } else{ licznik=0; current++; wynik+=current-d[i]; //cout<<"A"<<wynik<<" "<<current<<endl; newd[i]=current; } } } cout<<wynik<<endl; return 0; } |