Pagini recente » Cod sursa (job #2400119) | Cod sursa (job #1487117)
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("cifre.in");
ofstream g("cifre.out");
int A,B,C,K;
int getAns(int A,int B)
{
int ans=0;
for(int i=A;i<=B;i++)
{
int aux=i,cnt=0;
while(aux!=0)
{
if(aux%10==K)
++cnt;
aux/=10;
}
if(cnt>=C)
++ans;
}
return ans;
}
int Comb(int x,int y)
{
if(y>x)
return 0;
if(y<=0)
return 10000;
if(y==1)
return 2916;
if(y==2)
return 81*6;
if(y==3)
return 36;
if(y==4)
return 1;
}
int Count(int first,int last)
{
int aux=first,cnt=0;
aux/=10000;
while(aux!=0)
{
if(aux%10==K)
++cnt;
aux/=10;
}
return Comb(4,C-cnt);
}
int main()
{
f>>A>>B>>K>>C;
if(B-A<=10000)
g<<fixed<<setprecision(4)<<(double)getAns(A,B)/(double)(B-A+1)<<"\n";
else
{
int first=A/10000+1;
first*=10000;
int second=B/10000;
second*=10000;
int ans=0;
ans+=getAns(A,first-1);
ans+=getAns(second+1,B);
for(int i=first;i<second;i+=10000)
{
ans+=Count(i,i+10000);
}
g<<fixed<<setprecision(4)<<(double)ans/(double)(B-A+1)<<"\n";
}
return 0;
}