Cod sursa(job #908756)
#include <fstream>
using namespace std;
#include <iomanip>
#define ll long long
ll a,b,c,k;
ifstream f("cifre.in");ofstream g("cifre.out");
ll dp[66][66],v[666],cif100[66][66];
ll i,j;
ll din(ll val,ll cif){
ll i,j,n=0,result=0;
for(i=0;i<=15;++i)
for(j=0;j<=15;++j) dp[i][j]=0;
if (val<10) return(cif>val?0:1);
for(i=1;i<=10;++i) v[i]=0;
for(;val;val/=10) v[++n]=val%10;
if (v[1]>=cif) dp[1][1]=1,dp[1][0]=v[1];
else dp[1][0]=v[1]+1;
for(i=2;i<=n;++i)
for(j=0;j<=10;++j){
dp[i][j]+=cif100[i-1][j]*v[i];
if (j!=0){
if (v[i]==cif) dp[i][j]+=dp[i-1][j-1];
else dp[i][j]+=dp[i-1][j];
}
}
for(j=k;j<=10;++j) result+=dp[n][j];
return result;
}
int main()
{
f>>a>>b>>c>>k;
cif100[0][0]=1;
for(i=1;i<=10;++i)
for(j=0;j<=i;++j)
cif100[i][j]+=cif100[i-1][j]*9,
cif100[i][j]+=cif100[i-1][j-1];
ll result=din(b,c)-din(a-1,c);
g<<fixed;
g<<setprecision(4);
double ree=((double)result/(double)(b-a+1));
if (k==0) g<<0.0000<<'\n';else
g<<ree<<'\n';
f.close();g.close();
return 0;
}