Submission

Status:

P---------

Subtask/Task Score:

10/100

Score: 10

User: GastrointestinalTrackInflammation

Problemset: Croissaria Number

Language: cpp

Time: 0.239 second

Submitted On: 2026-10-06 11:37:48

#include<bits/stdc++.h>

using namespace std;

#define inall(x) for(auto& i:x)cin>>i;
#define outall(x) {for(auto i:x)cout<<i<<' ';cout<<endl;}
#define ini(x,y) for(auto& i:x)i=y;
#define tout(x) cout<<"DEBUG! :"<<x<<endl;
#define rout(x) {cout<<x<<endl;return;}
using ll = long long;
using df = double;

template<typename pair1,typename pair2>
istream& operator>>(istream& in,pair<pair1,pair2>&p) {return in>>p.first>>p.second;}

template <typename pair1, typename pair2>
ostream& operator<<(ostream& out,const pair<pair1,pair2>&p) {return out<<endl<<p.first<<' '<< p.second;}

ll precom[19][10];

int oom(ll n){
    int ans=0;
    while(n>=10){
        ans++;
        n/=10;
    }
    return ans;
}

ll findlimit(ll l,ll n){
    if(n==0)return 1;
    vector<ll>vec,pvec;
    while(n>0){
        ll cur=n%10;
        vec.push_back(cur);
        ll prev=1;
        if(!pvec.empty())prev=pvec.back();
        pvec.push_back(prev*min(l,cur+1));
        n/=10;
    }
    ll ans=0;
    for(int i=0;i<vec.size();i++){
        ll prev=1;
        if(i!=0)prev=pvec[i-1];
        if(i==0){
            ans+=min(l,vec[i])*prev;
        }else{
            ans+=min(l-1,max((ll)0,vec[i]-1))*prev;
        }
    }
    return ans;
}

ll cnumber(ll n){
    if(n<=9)return 0;
    int i=oom(n);
    ll p10=(ll)pow(10,i);
    ll ans=0;
    for(int j=0;j<n/p10;j++){
        ans+=precom[i][j];
    }
    ans+=findlimit(n/p10,n%p10);
    //cout<<n<<' '<<ans<<endl;
    return ans;
}

void solve(){
    ll l,r;
    cin>>l>>r;
    cout<<cnumber(r)-cnumber(l-1)<<endl;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    for(int j=0;j<=9;j++)precom[0][j]=0;
    for(int i=1;i<=18;i++){
        precom[i][0]=0;
        for(int j=1;j<=9;j++)precom[i][j]=(ll)pow(j,i);
        for(int j=0;j<=9;j++)precom[i][0]+=precom[i-1][j];
    }
    int t=1;
    cin>>t;
    while(t--)solve();
    return 0;
}