fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4.  
  5.  
  6. int escFlag = 0;
  7. int rec(int n,string &s,vector<int>&dp){
  8.  
  9. //Pruning
  10.  
  11. //Base case
  12. if(n==-1)
  13. return 1;
  14.  
  15. //Cache check
  16. if(dp[n]!=-1)
  17. return dp[n];
  18.  
  19. // Pick the current
  20. int ans = rec(n-1,s,dp);
  21.  
  22. if(n-1>=0){
  23.  
  24. string numStr = "";
  25. numStr+=s[n-1];
  26. numStr+=s[n];
  27.  
  28. int dig2 = stoi(numStr);
  29.  
  30. if(dig2<=26){
  31. ans+= rec(n-2,s,dp);
  32. }
  33. }
  34.  
  35. return dp[n]=ans;
  36.  
  37. }
  38.  
  39.  
  40. void solve(){
  41.  
  42. string str;
  43. cin>>str;
  44.  
  45. if(str=="0")
  46. {
  47. escFlag++;
  48. return;
  49. }
  50.  
  51. int n = str.length();
  52. vector<int>dp(n,-1);
  53. cout<<rec(n-1,str,dp)<<'\n';
  54. }
  55.  
  56.  
  57.  
  58. signed main(){
  59.  
  60. //Fast IO
  61. ios_base::sync_with_stdio(0);
  62. cin.tie(0);cout.tie(0);
  63.  
  64.  
  65. // int t;cin>>t; while(t--)
  66.  
  67. while(escFlag==0)solve();
  68.  
  69. return 0;
  70. }
Success #stdin #stdout 0.01s 5324KB
stdin
11
0
stdout
2