Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: august

Problemset: Strobogrammatic Numbers

Language: cpp

Time: 0.012 second

Submitted On: 2025-10-13 20:23:55

#include <bits/stdc++.h>
using namespace std;

#define ll long long

int size_l, size_r;
ll val_l, val_r, val_tem, ans=0;
string pick = "01869";

 // mid -> 0,1,8 not mid -> 6,9 -> 689, 609, 111 took roi per sen krub
void find(string cur, int n) {
    if (cur.size() == (n+1)/2) {
        val_tem=0;

        for (int i=0; i<cur.size(); i++) {
            val_tem*=10;
            val_tem+=cur[i]-'0';
        }
        for (int i=cur.size() + (n%2==1 ? -2:-1); i>=0; i--) {
            val_tem*=10;
            val_tem+=cur[i]-'0';
        }

        if (val_l <= val_tem && val_tem <= val_r) {
            ans++;
        }
        return;
    }

    for (int i=0; i<5; i++) {
        if (cur.empty() && i==0) continue;

        if (n%2==1  && n/2 == cur.size() && (i==0 || i== 1 || i==2)) {
            find(cur+pick[i], n);
        }
        else if (n/2 != cur.size()) {
            find(cur+pick[i], n);
        }
    }
}

int main() {
    string l,r;
    cin>> l>> r;

    size_l = l.size();
    size_r = r.size();

    for (int i=0; i<l.size(); i++) {// todecimal
        val_l*=10;
        val_l+=l[i]-'0';
    }
    for (int i=0; i<r.size(); i++) {// todecimal
        val_r*=10;
        val_r+=r[i]-'0';
    }
    

    for (int i=size_l; i<=size_r; i++) {
        string c="";
        find(c, i);
    }
    if (val_l <= 0 && val_r>=0) ans++;
    cout<< ans;
}