#include <bits/stdc++.h>
using namespace std;
#define FOR(i, l, r) for(int i = (l); i <= (r); ++i)
#define REP(i, n) FOR(i, 0, (n) - 1)
using LL = long long;
template<class T> int size(T &&x) {
return int(x.size());
}
template<class A, class B> ostream& operator<<(ostream &os, const pair<A, B> &p) {
return os << '(' << p.first << ", " << p.second << ')';
}
template<class T> auto operator<<(ostream &out, T &&x) -> decltype(x.begin(), out) {
out << '(';
for(auto it = x.begin(); it != x.end(); ++it)
out << *it << (it == prev(x.end()) ? "" : ", ");
return out << ")";
}
void dump() {}
template<class T, class... Args> void dump(T &&x, Args... args) {
cerr << x << "; ";
dump(args...);
}
struct Nl{~Nl(){cerr << '\n';}};
#ifdef DEBUG
#define debug(x...) cerr << (strcmp(#x, "") ? #x ": " : ""), dump(x), Nl(), cerr << ""
#else
#define debug(...) 0 && cerr
#endif
mt19937_64 rng(0);
int rd(int l, int r) {
return uniform_int_distribution<int>(l, r)(rng);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
string str;
cin >> str;
int n = size(str);
vector<LL> dp(n + 1);
dp[0] = 1;
auto get = [&](int i) { return str[i - 1] - '0'; };
FOR(i, 1, n) {
dp[i] = dp[i - 1] * (get(i) + 1);
if(i != 1) {
int x = get(i - 1) * 10 + get(i);
if(x < 10 || 18 < x) continue;
dp[i] += dp[i - 2] * (19 - x);
}
}
cout << dp[n] << "\n";
}
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 | #include <bits/stdc++.h> using namespace std; #define FOR(i, l, r) for(int i = (l); i <= (r); ++i) #define REP(i, n) FOR(i, 0, (n) - 1) using LL = long long; template<class T> int size(T &&x) { return int(x.size()); } template<class A, class B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; } template<class T> auto operator<<(ostream &out, T &&x) -> decltype(x.begin(), out) { out << '('; for(auto it = x.begin(); it != x.end(); ++it) out << *it << (it == prev(x.end()) ? "" : ", "); return out << ")"; } void dump() {} template<class T, class... Args> void dump(T &&x, Args... args) { cerr << x << "; "; dump(args...); } struct Nl{~Nl(){cerr << '\n';}}; #ifdef DEBUG #define debug(x...) cerr << (strcmp(#x, "") ? #x ": " : ""), dump(x), Nl(), cerr << "" #else #define debug(...) 0 && cerr #endif mt19937_64 rng(0); int rd(int l, int r) { return uniform_int_distribution<int>(l, r)(rng); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); string str; cin >> str; int n = size(str); vector<LL> dp(n + 1); dp[0] = 1; auto get = [&](int i) { return str[i - 1] - '0'; }; FOR(i, 1, n) { dp[i] = dp[i - 1] * (get(i) + 1); if(i != 1) { int x = get(i - 1) * 10 + get(i); if(x < 10 || 18 < x) continue; dp[i] += dp[i - 2] * (19 - x); } } cout << dp[n] << "\n"; } |
English