fork(2) 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. using namespace::std;
  8.  
  9. typedef vector <int> vi;
  10. vector<llu> dp;
  11. vi in;
  12. void f(int n)
  13. {
  14. if(in[n]*10 + in[n+1] <= 26)
  15. dp[n] = max(dp[n+2] * 2, dp[n+1] + dp[n+2]);
  16. else dp[n] = max(dp[n+2], dp[n+1]);
  17. }
  18. void set_dp(string s, vector<llu> &dp, int len)
  19. {
  20. dp = vector<llu>(len+1, 0);
  21. dp[len] = 0;
  22. dp[len-1] = 1;
  23. if(10*(s.at(len-2) -'0') + s.at(len-1) - '0' <= 26) dp[len-2] = 2;
  24. else dp[len-2] = 1;
  25. }
  26. int main()
  27. {
  28. // freopen("in.txt", "r", stdin);
  29. int i, t, len, flag = 1;
  30.  
  31. string s;
  32. cin>>s;
  33. while(flag || s.at(0) != 48)
  34. {
  35. flag = 0;
  36. len = 0;
  37. for(string::iterator it=s.begin(); it!=s.end(); ++it)
  38. len ++;
  39.  
  40. set_dp(s, dp, len);
  41.  
  42. in = vi(len+1, 0);
  43. fi(i, 0, len)
  44. in[i] = s.at(i) - '0';
  45.  
  46. fd(i, len-3, -1)
  47. f(i);
  48.  
  49. cout<<dp[0];
  50. cout<<endl;
  51. cin>>s;
  52. }
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0s 3436KB
stdin
25114
1111111111
3333333333
0
stdout
6
89
1