#include <bits/stdc++.h> #define d n.size() using namespace std; string n; vector<int>T[10000]; int i[200], j, k; long long wynik, ile=1, wynikc, pozycja; long long Val[109]; void Partycjon(int A, int B) { if (A==0){ for (j=0; j<B; ++j) T[ile].push_back(i[j]); ++ile; } else if (A>0){ i[B]=1; Partycjon(A-1, B+1); if(A>=2){ i[B]=2; Partycjon(A-2, B+1); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); for(j=0; j<=9; ++j) Val[j]=j+1; for (j=10; j<=18; ++j) Val[j]=18-j+1; cin>>n; Partycjon(d, 0); ile-=1; //Rozbicie napisu na odpowiednia liczbe czesci //Sprawdzenie na ile sposobow mozna je dodac for (j=1; j<=ile; ++j){ wynikc=1; pozycja=0; for (k=0; k<T[j].size(); ++k){ string A; int x; if (T[j][k]==1){ x=n[pozycja]-'0'; ++pozycja; wynikc=wynikc*Val[x]; //cout<<x<<" "; } else{ x=10*(n[pozycja]-'0')+(n[++pozycja]-'0'); if(x==0) x=99; ++pozycja; wynikc=wynikc*Val[x]; //cout<<x<<" "; } } //cout<<wynikc<<"\n"; wynik+=wynikc; } 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 | #include <bits/stdc++.h> #define d n.size() using namespace std; string n; vector<int>T[10000]; int i[200], j, k; long long wynik, ile=1, wynikc, pozycja; long long Val[109]; void Partycjon(int A, int B) { if (A==0){ for (j=0; j<B; ++j) T[ile].push_back(i[j]); ++ile; } else if (A>0){ i[B]=1; Partycjon(A-1, B+1); if(A>=2){ i[B]=2; Partycjon(A-2, B+1); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); for(j=0; j<=9; ++j) Val[j]=j+1; for (j=10; j<=18; ++j) Val[j]=18-j+1; cin>>n; Partycjon(d, 0); ile-=1; //Rozbicie napisu na odpowiednia liczbe czesci //Sprawdzenie na ile sposobow mozna je dodac for (j=1; j<=ile; ++j){ wynikc=1; pozycja=0; for (k=0; k<T[j].size(); ++k){ string A; int x; if (T[j][k]==1){ x=n[pozycja]-'0'; ++pozycja; wynikc=wynikc*Val[x]; //cout<<x<<" "; } else{ x=10*(n[pozycja]-'0')+(n[++pozycja]-'0'); if(x==0) x=99; ++pozycja; wynikc=wynikc*Val[x]; //cout<<x<<" "; } } //cout<<wynikc<<"\n"; wynik+=wynikc; } cout<<wynik; return 0; } |