#include <iostream> #include <bits/stdc++.h> using namespace std; long long n,wyn,m; int w[21],dl,t[21],p,ij,ip; vector<int>jedynki; vector<int>pary; bool bity[21]; bool zaj[21]; void dodaj() { int b=1; while(bity[b]==1) { bity[b]=0; b++; } bity[b]=1; } int main() { ios_base::sync_with_stdio(0); w[0]=1;w[1]=2;w[2]=3;w[3]=4;w[4]=5;w[5]=6;w[6]=7;w[7]=8;w[8]=9;w[9]=10;w[10]=9;w[11]=8;w[12]=7;w[13]=6;w[14]=5;w[15]=4;w[16]=3;w[17]=2;w[18]=1;w[19]=0,w[20]=0; cin>>n; long long m=n; while(m>0) { m/=10; dl++; } m=n; for(int i=dl; i>=1; i--) { t[i]=m%10; m/=10; } for(int i=1; i<dl; ++i) { if(t[i]==1) { jedynki.push_back(i); if(t[i+1]==1) { if(i<dl-1)pary.push_back(i); } } } ij=jedynki.size(); ip=pary.size(); int komb=1; for(int i=1; i<=ij; ++i) { komb*=2; } int wsk; for(int i=1; i<=komb; ++i) { wsk=0; for(int j=0; j<ip; ++j) { if((bity[pary[j]]==1)&&(bity[pary[j]+1]==1)) wsk++; } if(wsk==0) { long long mn,cz=1; for(int j=1; j<=dl; j++) { zaj[j]=0; } for(int j=0; j<ij; j++) { if(bity[j+1]==1) { zaj[jedynki[j]]=1; zaj[jedynki[j]+1]=1; mn=w[10*(t[jedynki[j]])+t[jedynki[j]+1]]; cz*=mn; } } for(int j=1; j<=dl; j++) { if(zaj[j]==0) { cz*=w[t[j]]; } } wyn+=cz; } dodaj(); } cout<<wyn; 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 | #include <iostream> #include <bits/stdc++.h> using namespace std; long long n,wyn,m; int w[21],dl,t[21],p,ij,ip; vector<int>jedynki; vector<int>pary; bool bity[21]; bool zaj[21]; void dodaj() { int b=1; while(bity[b]==1) { bity[b]=0; b++; } bity[b]=1; } int main() { ios_base::sync_with_stdio(0); w[0]=1;w[1]=2;w[2]=3;w[3]=4;w[4]=5;w[5]=6;w[6]=7;w[7]=8;w[8]=9;w[9]=10;w[10]=9;w[11]=8;w[12]=7;w[13]=6;w[14]=5;w[15]=4;w[16]=3;w[17]=2;w[18]=1;w[19]=0,w[20]=0; cin>>n; long long m=n; while(m>0) { m/=10; dl++; } m=n; for(int i=dl; i>=1; i--) { t[i]=m%10; m/=10; } for(int i=1; i<dl; ++i) { if(t[i]==1) { jedynki.push_back(i); if(t[i+1]==1) { if(i<dl-1)pary.push_back(i); } } } ij=jedynki.size(); ip=pary.size(); int komb=1; for(int i=1; i<=ij; ++i) { komb*=2; } int wsk; for(int i=1; i<=komb; ++i) { wsk=0; for(int j=0; j<ip; ++j) { if((bity[pary[j]]==1)&&(bity[pary[j]+1]==1)) wsk++; } if(wsk==0) { long long mn,cz=1; for(int j=1; j<=dl; j++) { zaj[j]=0; } for(int j=0; j<ij; j++) { if(bity[j+1]==1) { zaj[jedynki[j]]=1; zaj[jedynki[j]+1]=1; mn=w[10*(t[jedynki[j]])+t[jedynki[j]+1]]; cz*=mn; } } for(int j=1; j<=dl; j++) { if(zaj[j]==0) { cz*=w[t[j]]; } } wyn+=cz; } dodaj(); } cout<<wyn; return 0; } |