提交时间:2025-11-26 17:52:34
运行 ID: 38971
#include<bits/stdc++.h> #define int long long #define endl '\n' using namespace std; const int N=5e5+7,mod=1e9+7; inline void Add(int &x,int y){x+=y;(x>=mod?x-=mod:x);} inline int Sum(int x,int y){return (x+y>=mod?x+y-mod:x+y);} inline int S(vector<int> R){ static int f[N][11][2],g[N][11][2],h[N][2]; int L=R.size(); memset(f[L],0,sizeof(f[L])); memset(g[L],0,sizeof(g[L])); memset(h[L],0,sizeof(h[L])); h[L][1]=1; for(int i=L-1;i>=0;i--){ // cout<<R[i]<<endl; memset(f[i],0,sizeof(f[i])); memset(g[i],0,sizeof(g[i])); memset(h[i],0,sizeof(h[i])); //h Add(h[i][1],h[i+1][1]); Add(h[i][0],Sum(10*h[i+1][0]%mod,R[i])); //g for(int j=0;j<=9;j++){ Add(g[i][j][0],Sum((10-j)*h[i+1][0]%mod,g[i+1][j][0]*10%mod)); Add(g[i][j][0],Sum((j<R[i])*(R[i]-j),g[i+1][j][1]*R[i]%mod)); Add(g[i][j][1],(j<=R[i])+g[i+1][j][1]); } //f int S0=0; for(int j=0;j<=9;j++)Add(S0,f[i+1][j][0]); for(int j=0;j<=9;j++)Add(f[i][j][0],Sum(g[i+1][j+1][0],S0)); int S1=0; for(int j=0;j<=9;j++)Add(S1,f[i+1][j][1]); for(int j=0;j<R[i];j++)Add(f[i][j][0],Sum(g[i+1][j+1][1],S1)); Add(f[i][R[i]][1],Sum(S1,g[i+1][R[i]+1][1])); } int Ans=0; for(int j=0;j<=9;j++)for(int k=0;k<2;k++)Add(Ans,f[0][j][k]); return Ans; } vector<int> L,R; inline void slv(){ string SL,SR;cin>>SL>>SR; L.clear();R.clear(); for(auto ch:SL)L.push_back(ch-'0'); for(auto ch:SR)R.push_back(ch-'0'); reverse(R.begin(),R.end()); reverse(L.begin(),L.end()); for(int i=0;i<L.size();i++){ if(L[i]){ L[i]--; for(int j=0;j<i;j++)L[j]=9; break; } } cout<<(S(R)-S(L)+mod)%mod<<endl; return; } signed main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int T;cin>>T; while(T--)slv(); cout.flush(); return 0; }