Submission #1244496

#TimeUsernameProblemLanguageResultExecution timeMemory
1244496DeathIsAwePalindrome-Free Numbers (BOI13_numbers)C++20
1.25 / 100
1 ms328 KiB
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
using namespace std;


ll mypow(ll a, ll b) {
    ll val = 1;
    for (int i=0;i<b;i++) {
        val *= a;
    }
    return val;
}


ll numofdigits(ll a) {
    ll val = 0;
    while (a != 0) {
        val += 1;
        a /= 10;
    }
    return val;
}


ll pfnum(ll a) {
    if (a == 0) return 1;
    if (a == -1) return 0;
    ll digitnum = numofdigits(a), ans = 0, base = 1, digit, dummy;
    if (digitnum == 1) {
        return a + 1;
    }
    ans += 10;
    for (int i=2;i<digitnum;i++) {
        ans += (mypow(8, i) / 64) * 9 * 9;
    }
    ll bruh = a / mypow(10, digitnum - 2);
    for (int i=10;i<bruh;i++) {
        if (i / 10 == i % 10) continue;
        ans += mypow(8, digitnum - 2);
    }
    ll prev1 = bruh % 10, prev2 = bruh / 10;
    for (int i=digitnum - 2;i>0;i--) {
        digit = (a / mypow(10, i - 1)) % 10;
        for (int j=0;j<digit;j++) {
            if (j == prev1 || j == prev2) continue;
            ans += mypow(8, i - 1);
        }
        if (digit == prev1 || digit == prev2) {
            ans -= 1;
            break;
        }
        prev2 = prev1;
        prev1 = digit;
    }
    ans += 1;
    return ans;
}


int main() {
    ll a, b; cin >> a >> b;
    cout << pfnum(b) - pfnum(a - 1) + 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...