#include <iostream> #include <string> #include <algorithm> using namespace std; typedef long long bigint; int val(const string &str){ int v = std::stoi(str); return max(0, min(v+1, 19-v)); } bigint R(int pos, const string &str){ bigint wnk=0; int left_size = (int)str.size()-pos; if(left_size > 0){ if(left_size>=2 && val(str.substr(pos, 2))) wnk += val(str.substr(pos, 2))*R(pos+2, str); if(val(str.substr(pos, 1))) wnk += val(str.substr(pos, 1))*R(pos+1, str); return wnk; } else return 1; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); string n; cin >> n; cout << R(0, n) << "\n"; 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 | #include <iostream> #include <string> #include <algorithm> using namespace std; typedef long long bigint; int val(const string &str){ int v = std::stoi(str); return max(0, min(v+1, 19-v)); } bigint R(int pos, const string &str){ bigint wnk=0; int left_size = (int)str.size()-pos; if(left_size > 0){ if(left_size>=2 && val(str.substr(pos, 2))) wnk += val(str.substr(pos, 2))*R(pos+2, str); if(val(str.substr(pos, 1))) wnk += val(str.substr(pos, 1))*R(pos+1, str); return wnk; } else return 1; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); string n; cin >> n; cout << R(0, n) << "\n"; return 0; } |