제출 #1255132

#제출 시각아이디문제언어결과실행 시간메모리
1255132Mer123haba456Palindrome-Free Numbers (BOI13_numbers)C++20
100 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
#define fast_io ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define N lli(2e5)
#define MOD lli(1e9 + 7)
#define heps(v) v.begin(), v.end()
typedef long long int lli;
typedef vector<lli> vlli;
typedef pair<lli, lli> plli;
typedef vector<plli> vplli;
typedef pair<lli, plli> pplli;
typedef vector<pplli> vpplli;

lli n,m,k,q,t;

lli dp[N];
lli hepsek[N];

bool ispal(lli say){
    vlli vect;
    while(say > 0 ){
        vect.push_back(say%10);
        say/=10;
    }
    bool durum = 1;
    for(lli i = 0;i<vect.size();i++){
        if(i > 0 && vect[i] == vect[i-1])
            durum = 0;
        if(i > 1 && vect[i] == vect[i-2])
            durum = 0;
    }
    return durum;
}

lli palbul(lli say){
    vlli vect;
    while(say > 0){
        vect.push_back(say % 10);
        say/=10;
    }
    lli dond = 0;
    for(lli i = 0;i<vect.size();i++){
        if(i == 0)
            dond += 1;
        else if(i == 1)
            dond += 9;
        else
            dond += 9 * 9 * dp[i-2];
    }
    //cout << "bas" << dond << endl;
    for(lli i = vect.size()-1;i>=0;i--){
        if(vect[i] > 0){
            if(i + 1 < vect.size()){
                lli kacart = vect[i];
                if(i + 1 < vect.size() && vect[i + 1] < vect[i])
                    kacart--;
                if(i + 2 < vect.size() && vect[i + 2] < vect[i])
                    kacart--;
                dond += kacart * dp[i];
            }else{
                if(i == 0)
                    dond += vect[i] - 1;
                else
                    dond += (vect[i] - 1) * 9 * dp[i-1];
            }
            //cout << i << " " << dond << endl;
        }
        
        if(i + 1 < vect.size() && vect[i] == vect[i+1])
            break;
        if(i + 2 < vect.size() && vect[i] == vect[i+2])
            break;
        if(i == 0)
            dond++;
    }
    if(vect.empty())
        return 1;
    return dond;
}

int main()
{
    fast_io
    cin >> n >> m;
    dp[0] = 1;
    for(lli i = 1;i<=19;i++){
        dp[i] = dp[i-1] * 8;
    }
    lli msu = palbul(m);
    lli say = 0;
    /*for(lli i = 0;i<=m;i++)
        say += ispal(i);
    cout << msu << " " << say << endl;*/
    if(n == 0)
        cout << msu << endl;
    else
        cout << msu - palbul(n-1) << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...