提交时间:2024-11-10 21:14:14

运行 ID: 34577

#include<bits/stdc++.h> #define ll long long #define lson pos<<1 #define rson pos<<1|1 using namespace std; const int maxn=2e5+10; const ll mod=1e9+7; const ll inf=1e10; ll n,m,k,t,ans=0; ll a[maxn],vis[20][5],C[20][20],A[20][20],f[maxn][20]; char c[maxn],s[maxn]; int main(){ // freopen("test.in","r",stdin); // freopen("math.out","w",stdout); scanf("%lld",&n); scanf("%s",c+1); scanf("%s",s+1); scanf("%lld",&m); f[0][0]=1; for(int i=1;i<=n;i++){ for(ll j=1;j<=min(10,i);j++){ f[i][j]=f[i-1][j-1]+f[i-1][j]*j; } } C[0][0]=1ll; A[0][0]=1ll; for(ll i=1;i<=10;i++){ C[i][0]=1ll; A[i][0]=1ll; for(ll j=1;j<=i;j++){ C[i][j]=C[i-1][j]+C[i-1][j-1]; A[i][j]=A[i][j-1]*(i-j+1ll); } } memset(vis,0,sizeof(vis)); int cnt=0,cnt1=0; bool fg=0; for(int i=1;i<=n;i++){ if(i==1){ ans=(s[i]-c[i])*C[9][m-1]*(((f[n-1][m]*A[m][m])+f[n-1][m-1]*A[m-1][m-1])%mod)%mod; } else{ for(int j=0;j<s[i]-'0'&&cnt<=m;j++){ int tmp=cnt+(!vis[j][0]); // cout<<vis[j][0]<<" "<<cnt<<endl; if(tmp>m) continue; for(int k=0;k<=tmp;k++){ // cout<<C[10-tmp][m-tmp]<<" "<<f[n-i][m-k]<<" "<<k<<" "<<j<<endl; ans=(((ans+(C[10-tmp][m-tmp]*f[n-i][m-k]*A[m-k][m-tmp])%mod)*A[tmp][tmp-k]%mod)+mod)%mod; } } for(int j=0;j<c[i]-'0'&&cnt1<=m;j++){ int tmp=cnt1+(!vis[j][1]); if(tmp>m) continue; for(int k=0;k<=tmp;k++){ ans=(((ans-(C[10-tmp][m-tmp]*f[n-i][m-k]*A[m-k][m-tmp])+mod)%mod)*A[tmp][tmp-k]%mod+mod)%mod; } } } if(!vis[s[i]-'0'][0]) vis[s[i]-'0'][0]=1,cnt++; if(!vis[c[i]-'0'][1]) vis[c[i]-'0'][1]=1,cnt1++; } if(cnt==m) ans++; printf("%lld",ans); fclose(stdin); fclose(stdout); return 0; }