Submission
Status:
PPPPPP----
Subtask/Task Score:
60/100
Score: 60
User: lazy
Problemset: Strobogrammatic Numbers
Language: cpp
Time: 0.021 second
Submitted On: 2025-10-14 23:41:40
#include <bits/stdc++.h>
using namespace std;
vector<vector<string>> dp(25);
map<char, char> pairs = {
{'0','0'},
{'1','1'},
{'6','9'},
{'8','8'},
{'9','6'}
};
vector<string> at_i_digit(int i, int outer_len) {
if (i == 0) return {""};
if (i == 1) return {"0","1","8"};
if (!dp[i].empty()) return dp[i];
vector<string> smaller = at_i_digit(i - 2, outer_len);
vector<string> result;
for (auto &s : smaller) {
for (auto &[a, b] : pairs) {
if (a == '0' && i == outer_len) continue;
result.push_back(string(1, a) + s + string(1, b));
}
}
dp[i] = result;
return result;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long lower, upper;
cin >> lower >> upper;
int digits_low = to_string(lower).length();
int digits_high = to_string(upper).length();
long long count = 0;
for (int len = digits_low; len <= digits_high; len++) {
vector<string> strobo = at_i_digit(len, len);
for (auto &s : strobo) {
long long num = stoll(s);
if (num >= lower && num <= upper) count++;
}
}
cout << count;
return 0;
}