Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: letdown

Problemset: Strobogrammatic Numbers

Language: cpp

Time: 0.034 second

Submitted On: 2025-10-12 19:18:40

#include <iostream>
#include <vector>

using namespace std;
vector<string> createStrobo(int cur, int len) {
    if (cur == 0) return {""};
    if (cur == 1) return {"0", "1", "8"};

    vector<string> strobo;
    vector<string> middle = createStrobo(cur-2, len);
    for (auto mid: middle) {
        if (cur > len) break;
        if (cur < len) strobo.push_back("0" + mid + "0");
        strobo.push_back("1" + mid + "1");
        strobo.push_back("6" + mid + "9");
        strobo.push_back("8" + mid + "8");
        strobo.push_back("9" + mid + "6");
    }
    return strobo;
}

int main() {
    long long low, high, ans=0;
    cin >> low >> high;

    int l = to_string(high).length();
    for (int i = 0; i <= l; i++) {
        vector<string> strobo = createStrobo(i, i);
        for (auto s : strobo) {
            if (s == "" || s[0] == '0') continue;
            long long sint = stoll(s);
            if (sint >= low && sint <= high) ans++;
        }
    }
    // vector<string> strobo = createStrobo(l, l);
    // for (auto s : strobo) {
    //     // cout << s << " ";
    //     if (s == "" || s[0] == '0') continue;
    //     long long sint = stoll(s);
    //     if (sint >= low && sint <= high) ans++;
    // }
    cout << ans;
    // vector<string> strobo = createStrobo(3, 3);
    // for (auto s : strobo) cout << s << " ";
}