Submission #860153

#TimeUsernameProblemLanguageResultExecution timeMemory
860153raphaelpPalindrome-Free Numbers (BOI13_numbers)C++14
100 / 100
1 ms416 KiB
#include <bits/stdc++.h>
using namespace std;
long long nb(long long N)
{
    if (N == -1)
        return 0;
    if (N == 0)
        return 1;
    long long mult = 1;
    int var = 0;
    while (pow(10, var) <= N)
        var++;
    var--;
    long long tot = 1;
    int first = 0;
    long long i = 1;
    for (int j = 0; i < N; j++)
    {
        i = pow(10, j);
        if (N / i > 9 && (N / i) % 10 == (N / i / 10) % 10)
        {
            first = j + 1;
        }
        if (N / i > 99 && (N / i) % 10 == (N / i / 100) % 10)
        {
            first = j + 1;
        }
        i = pow(10, j + 1);
    }
    if (first == 0)
        tot++;
    for (int i = 1; i < first; i++)
    {
        N /= 10;
        mult *= 8;
    }
    for (int i = first; N; i++)
    {
        int pos = N % 10;
        if (N < 10)
            pos--;
        if (N > 9 && (N / 10) % 10 < N % 10)
            pos--;
        if (N > 99 && (N / 100) % 10 < N % 10)
            pos--;
        tot += pos * mult;
        N /= 10;
        if (N > 9)
            mult *= 8;
        else
            mult *= 9;
    }
    mult = 9;
    for (int i = 0; i < var; i++)
    {
        tot += mult;
        if (i == 0)
            mult *= 9;
        else
            mult *= 8;
    }
    return tot;
}
int main()
{
    long long a, b;
    cin >> a >> b;
    cout << nb(b) - nb(a - 1) << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...