fork download
  1. #include<bits/stdc++.h>
  2. #include<fstream>
  3. #define llu long long unsigned
  4. #define fi(i,a,b) for(int i=(a);i<(b);i++)
  5. #define fd(i,a,b) for(int i=(a);i>(b);--i)
  6. #define pb push_back
  7.  
  8. using namespace::std;
  9.  
  10. typedef vector <int> vi;
  11. vector<llu> dp;
  12. vi in;
  13. void f(int n)
  14. {
  15. dp[n] = dp[n+1];
  16. if(in[n]*10 + in[n+1] <= 26)
  17. dp[n] += dp[n+2];
  18. }
  19. void set_dp(string s, vector<llu> &dp, int len)
  20. {
  21. dp = vector<llu>(len+1, 0);
  22. dp[len] = 0;
  23. dp[len-1] = 1;
  24. if(10*(s.at(len-2) -'0') + s.at(len-1) - '0' <= 26) dp[len-2] = 2;
  25. else dp[len-2] = 1;
  26. }
  27. int main()
  28. {
  29. // freopen("in.txt", "r", stdin);
  30. int i, len, flag = 1;
  31.  
  32. string s;
  33. cin>>s;
  34. while(flag || s.at(0) != 48)
  35. {
  36. flag = 0;
  37. len = 0;
  38. for(string::iterator it = s.begin(); it != s.end(); ++it)
  39. len ++;
  40.  
  41. set_dp(s, dp, len);
  42.  
  43. in = vi(len+1, 0);
  44. fi(i, 0, len)
  45. in[i] = s.at(i) - '0';
  46.  
  47. fd(i, len-3, -1)
  48. f(i);
  49.  
  50. cout<<dp[0];
  51. cout<<endl;
  52. cin>>s;
  53. }
  54. return 0;
  55. }
  56.  
Runtime error #stdin #stdout #stderr 0s 3476KB
stdin
9
0
stdout
Standard output is empty
stderr
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::at