样例全过,但是RE(不知道多少分也不知道那些点AC因为OJ不显示),求调
#include<bits/stdc++.h>
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long ll;
typedef pair<ll,ll> PLL;
const int N=20;
const int mod=998244353;
ll l,r;
int k;
int a[N+5];
PLL dp[N+5][1<<11];
ll p[N+5];
int count(int x)
{
int cnt=0;
for(int i=x;i>0;i-=lowbit(i)) cnt++;
return cnt;
}
PLL dfs(int step,bool flag,int mask)
{
if(step==0) return {0,1};
if(!flag&&dp[step][mask].first!=-1) return dp[step][mask];
int maxx=flag?a[step]:9;
ll ret=0,cnt=0;
for(int i=0;i<=maxx;i++)
{
if(count(mask|(1<<i))>k) continue;
if(mask==0&&i==0)
{
PLL res=dfs(step-1,flag&&(i==maxx),0);
ret=(ret+res.first)%mod;
cnt=(cnt+res.second)%mod;
}
else
{
PLL res=dfs(step-1,flag&&(i==maxx),mask|(1<<i));
ret=(1ll*i*p[step]%mod*res.second+res.first+ret)%mod;
cnt=(cnt+res.second)%mod;
}
}
if(!flag) dp[step][mask]={ret,cnt};
//cout<<step<<" "<<flag<<" "<<mask<<" "<<ret<<" "<<cnt<<"\n";
return {ret,cnt};
}
void init()
{
ll k=1;
for(int i=1;i<=18;i++) p[i]=k%mod,k*=10;
}
ll solve(ll x)
{
ll k=x;
memset(a,0,sizeof(a));
for(int i=18;i>=1;i--)
{
a[i]=k/p[i];
k%=p[i];
}
for(int i=0;i<=24;i++)
{
for(int j=0;j<(1<<11);j++)
{
dp[i][j]={-1,-1};
}
}
return (dfs(19,1,0).first+mod)%mod;
}
signed main()
{
init();
cin>>l>>r>>k;
cout<<(solve(r)-solve(l-1)+mod)%mod<<"\n";
return 0;
}