Pagini recente » Cod sursa (job #1377922) | Cod sursa (job #2216811) | Cod sursa (job #2376608) | Cod sursa (job #1316150) | Cod sursa (job #3155120)
#include <bits/stdc++.h>
#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
///#include <tryhardmode>
///#include <GODMODE::ON>
using namespace std;
ifstream fin ("cifre.in");
ofstream fout ("cifre.out");
const int NMAX=12;
int dp[NMAX][NMAX][10][2];
int v[NMAX];
int cif,k;
int solve(int n)
{
int kon=0,i,j,pref,digit,step,last,frecv;
int total=0;
while(n)
{
v[++kon]=n%10;
n/=10;
}
for(i=0;i<2;i++)
for(j=0;j<11;j++)
for(digit=0;digit<=9;digit++)
for(pref=0;pref<2;pref++)
dp[i][j][digit][pref]=0;
for(i=1;i<=v[kon];i++)
{
if(i==cif)
{
if(v[kon]==i)
dp[kon][1][i][1]=1;
else
dp[kon][1][i][0]=1;
}
else
{
if(v[kon]==i)
dp[kon][0][i][1]=1;
else
dp[kon][0][i][0]=1;
}
}
for(i=1;i<kon;i++)
{
for(j=1;j<=9;j++)
{
if(j==cif)
dp[i][1][j][0]=1;
else
dp[i][0][j][0]=1;
}
}
for(i=kon-1;i>=1;i--)
{
for(j=0;j<=kon;j++)
for(digit=0;digit<=9;digit++)
for(pref=0;pref<2;pref++)
{
for(step=0;step<=9;step++)
{
int memo=dp[i+1][j][digit][pref];
if(memo)
{
if(pref==1 && v[i]<step)
continue;
int aux=1;
if(pref==1 && v[i]==step)
aux=1;
else
aux=0;
if(step==cif)
dp[i][j+1][step][aux]+=memo;
else
dp[i][j][step][aux]+=memo;
}
}
}
}
for(last=0;last<=9;last++)
for(frecv=k;frecv<=kon;frecv++)
total+=dp[1][frecv][last][1]+dp[1][frecv][last][0];
return total;
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
int a,b;
fin>>a>>b>>cif>>k;
int favorabil=solve(b)-solve(a-1);
int posibil=b-a+1;
fout<<fixed<<setprecision(4)<<(double)favorabil/posibil;
fin.close();
fout.close();
return 0;
}