This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<iostream>
using namespace std;
//daca nu avem 2 cifre consecutive egale, sau o cifra cu 2 vecini egali nu avem palindrom;
long long solve(long long x)
{
    if(x<10)
        return x+1;
    long long p10=1;
    int nrc=1;
    while(p10<=x)
    {
        p10*=10LL;
        nrc++;
    }
    nrc--;
    p10/=10;
    //acelasi nr de cifre ca si c
    long long rez0=1; //pana acum cifrele din fata sunt identice cu x
    long long rez1=0; //am pus o cifra < cifra din x mai in fata, deci pot pune ce vreau
    int c1=-1,c2=-1;  //ultimele 2 cifre din x
    while(p10>=1)
    {
        int c=x/p10;
        long long _rez0=0,_rez1=0;
        //daca nu pot sa continui cu egalitatea
        if(c!=c1 && c!=c2)
            _rez0=1;
        else
            _rez0=0;
        //a fost egal, acum pun o cifra mai mica decat c
        int nrpos=0;
        if(c1!=-1)
        {
            for(int j=0; j<c; j++)
            {
                if(j!=c1 && j!=c2)
                    nrpos++;
            }
        }
        else
        {
            for(int j=1; j<c; j++)
            {
                if(j!=c1 && j!=c2)
                    nrpos++;
            }
        }
        _rez1=_rez1+rez0*nrpos;
        //pot sa pun orice cifra (am rezolvat restrictia <)
        if(c1!=-1)
        {
            if(c2==-1) //a doua cifra
                _rez1=_rez1+rez1*9LL;
            else
                _rez1=_rez1+rez1*8LL;
        }
        x=x%p10;
        p10/=10LL;
        c2=c1;
        c1=c;
        rez0=_rez0;
        rez1=_rez1;
    }
    //nr de cifre mai mic
    long long rez3=1; //(0)
    for(int i=nrc-1; i>=1; i--)
    {
        long long nrpos=9;
        if(i>1)
            nrpos*=9LL;
        for(int j=3; j<=i; j++)
            nrpos*=8LL;
        rez3+=nrpos;
    }
    return rez0+rez1+rez3;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    long long a,b;
    cin>>a>>b;
    cout<<solve(b)-solve(a-1)<<"\n";
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |