Submission #713116

#TimeUsernameProblemLanguageResultExecution timeMemory
713116StickfishPalindrome-Free Numbers (BOI13_numbers)C++17
100 / 100
1 ms336 KiB
#include <iostream> #include <vector> #include <bitset> using namespace std; using ll = long long; ll pw(ll a, ll m) { if (!m) return 1; if (m % 2) return a * pw(a, m - 1); return pw(a * a, m / 2); } ll get_ans_pow10(ll k) { if (k == 0) return 0; if (k == 1) return 10; if (k == 2) return 90; return pw(8, k - 2) * 90; } ll get_ans(ll n) { if (n == -1) return 0; ll k = 0; while (n >= pw(10, k + 1)) ++k; vector<int> ds(k + 3, 11); //ds[k + 1] = 0; for (int i = k; i >= 0; --i) { ds[i] = n / pw(10, i) % 10; } ll ans = 0; for (int i = k; i >= 0; --i) { // d < ds[i] if (i < k) { int mul = ds[i]; if (ds[i + 1] < ds[i]) --mul; if (ds[i + 2] < ds[i]) --mul; ans += pw(8, i) * mul; } else { if (i > 0) ans += (ds[i] - 1) * 9 * pw(8, i - 1); else ans += ds[i] - 1; for (int j = 0; j < i; ++j) { if (j > 0) ans += 9 * 9 * pw(8, j - 1); else ans += 9; } ++ans; } //cout << ans << endl; if (ds[i] == ds[i + 1] || ds[i] == ds[i + 2]) break; if (i == 0) ++ans; } return ans; } signed main() { ll a, b; cin >> a >> b; //cout << get_ans(a - 1) << '\n'; //cout << get_ans(b) << ' ' << get_ans(a - 1) << '\n'; cout << get_ans(b) - get_ans(a - 1) << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...