Pagini recente » Cod sursa (job #2052447) | Cod sursa (job #2574796) | Cod sursa (job #2662754) | Cod sursa (job #92399) | Cod sursa (job #3212536)
/*
"care a facut teste cu Lattice reduction attack e ciudat"
"linistiti va putin"
- 2023 -
*/
#include<bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
#define int long long
using namespace std;
int dp[12][12][2];
int vlim[12];
int c,k;
int calc(int x)
{
int cnt,len,newcif,app,ans;
cnt=0;
do
{
cnt++;
vlim[cnt]=x%10;
x=x/10;
}
while (x);
reverse(vlim+1,vlim+1+cnt);
for (len=1; len<=cnt; len++)
{
for (app=0;app<=cnt;app++)
{
dp[len][app][0]=0;
dp[len][app][1]=0;
}
}
for (len=1; len<=cnt; len++)
{
if (len!=1)
{
for (app=0;app<=len;app++)
{
if (vlim[len]==c && app!=0)
{
dp[len][app][1]+=dp[len-1][app-1][1];
}
else if (vlim[len]!=c)
{
dp[len][app][1]+=dp[len-1][app][1];
}
}
for (newcif=0; newcif<=9; newcif++)
{
for (app=0; app<=len; app++)
{
if (newcif<vlim[len])
{
if (newcif==c && app!=0)
{
dp[len][app][0]+=dp[len-1][app-1][0];
dp[len][app][0]+=dp[len-1][app-1][1];
}
else if (newcif!=c)
{
dp[len][app][0]+=dp[len-1][app][0];
dp[len][app][0]+=dp[len-1][app][1];
}
}
else
{
if (newcif==c && app!=0)
dp[len][app][0]+=dp[len-1][app-1][0];
else if (newcif!=c)
dp[len][app][0]+=dp[len-1][app][0];
}
}
}
}
else
{
for(newcif=0; newcif<=9; newcif++)
{
if (newcif==vlim[len] && newcif==c)
dp[len][1][1]=1;
else if (newcif==c && newcif<vlim[len])
dp[len][1][0]=1;
else if (newcif<vlim[len])
dp[len][0][0]++;
}
}
}
ans=0;
for(app=k;app<=cnt;app++)
{
ans+=dp[cnt][app][0];
ans+=dp[cnt][app][1];
}
return ans;
}
signed main()
{
ifstream fin("cifre.in");
ofstream fout("cifre.out");
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long a,b,favorabil,total;
long double probabilitate;
fin >> a >> b >> c >> k;
if (a!=0)
{
favorabil=calc(b)-calc(a-1);
total=b-a+1;
}
else
{
favorabil=calc(b);
total=b;
}
probabilitate=1.0*favorabil/total;
fout << probabilitate;
}