Submission #283188

#TimeUsernameProblemLanguageResultExecution timeMemory
283188altalkPalindrome-Free Numbers (BOI13_numbers)C++14
7.50 / 100
1 ms384 KiB
#include <bits/stdc++.h>
#define loop(a, b) for(int a = 0; a < b; ++a)
#define loop1(a, b) for(int a = 1; a <= b; ++a)
#define loopc(a, c, b) for(int a = c; a < b; ++a)
#define loopr(a, b) for(int a = b-1; a >= 0; --a)
#define mp make_pair

using namespace std;

typedef unsigned long long ull;

deque<int> aa, bb;
ull ai, bi, p, av=0, bv=0, v;
set<int> pos;
int prev=-1, prev2=-1, as, bs;

int main() {
    cin >> ai >> bi;
    ++bi;
    while(ai) {
        aa.push_front(ai%10);
        ai /= 10;
    }
    while(bi) {
        bb.push_front(bi%10);
        bi /= 10;
    }

    loop(a, 10) pos.insert(a);

    as = aa.size();
    loop(a, as) {
        if (a == 0) {
            v = aa[0];
            if (as > 1) v *= 9;
            loopc(w, 2, as) v *= 8;
            av = v;
        }
        else {
            v = aa[a] - (int)(aa[a] > aa[a-1]);
            if (a > 1) v -= (int)(aa[a] > aa[a-2]);
            loopc(w, a+1, as) v *= 8;
            av += v;
        }
        //cout << av << endl;
    }

    bs = bb.size();
    loop(b, bs) {
        //cout << bb[b]  << " bb"<< endl;
        if (b == 0) {
            v = bb[0];

            if (bs > 1) v *= 9;
            loopc(w, 2, bs) v *= 8;
            bv = v;
        }
        else {
            v = bb[b] - (int)(bb[b] > bb[b-1]);
            if (b > 1 && bb[b-1] != bb[b-2]) v -= (int)(bb[b] > bb[b-2]);
            loopc(w, b+1, bs) v *= 8;
            bv += v;
            //cout << v << " v" << endl;
        }
        //cout << bv << endl;
    }

    cout << bv - av << endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...