_3Zinc_
2025-01-10 20:16:27
简单的数位 dp。
发现
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int L=105;
string s,l,r;
ll f[L][10][2];
int ln;
ll solve(int p,int x,int flag) {
if(p>=ln) return 1;
if(~f[p][x][flag]) return f[p][x][flag];
int lim=flag?(s[p]-'0'):9;
f[p][x][flag]=0;
for(int i=x;i<=lim;i++) (f[p][x][flag]+=solve(p+1,i,flag&&(i==lim)))%=mod;
return f[p][x][flag];
}
int main() {
cin>>l>>r,s=r,ln=s.size();
memset(f,-1,sizeof(f));
ll ans=solve(0,0,1);
memset(f,-1,sizeof(f));
s=l,ln=s.size(),ans-=solve(0,0,1)-1;
for(int i=0;i<s.size()-1;i++)
if(s[i]>s[i+1]) {
ans--; break ;
}
ans=(ans%mod+mod)%mod;
cout<<ans<<endl;
return 0;
}