Cod sursa(job #2703534)
Utilizator | Data | 8 februarie 2021 18:41:44 | |
---|---|---|---|
Problema | Cifre | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 3.11 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream f("cifre.in");
ofstream g("cifre.out");
int a,b,c,k,valori[15],i;
int val(int x)
{
if (x==c)
{
return 1;
}
int copie=x,i,q,v[15],sum=0,lim,j,numar,ok[15],t,start,cif,p;
memset(v,0,sizeof(v));
memset(ok,0,sizeof(ok));
q=0;
while (copie)
{
v[++q]=copie%10;
copie=copie/10;
}
reverse(v+1,v+q+1);
lim=(1<<q);
sum=0;
for (i=0;i<lim;i++)
{
numar=0;
for (j=0;j<q;j++)
{
if ((i&(1<<j))!=0)
{
numar++;
ok[j+1]=1;
}
else
{
ok[j+1]=0;
}
}
if (numar>=k)
{
int ok1=1;
for (j=0;j<q;j++)
{
for (t=1;t<=j;t++)
{
if (ok[t]==1&&v[t]!=c)
{
ok1=0;
break;
}
if (ok[t]==0&&v[t]==c)
{
ok1=0;
break;
}
}
if (ok1==0)
{
break;
}
if (ok[j+1]==1)
{
if (v[j+1]==c)
{
continue;
}
p=1;
for (int t2=j+2;t2<=q;t2++)
{
if (ok[t2]==0)
{
p=p*9;
}
}
sum+=p;
}
else
{
if (j+1==1)
{
start=1;
}
else
{
start=0;
}
for (cif=start;cif<=v[t];cif++)
{
if (cif==c)
{
continue;
}
p=1;
for (int t2=j+2;t2<=q;t2++)
{
if (ok[t2]==0)
{
p=p*9;
}
}
sum=sum+p;
}
}
}
}
}
return sum;
}
int val2(int x)
{
int copie=x,q=0,sum=0;
while (copie)
{
copie=copie/10;
q++;
}
for (i=1;i<q;i++)
{
sum+=valori[i];
}
return sum+val(x);
}
int p,valfin,st;
int main()
{
f>>a>>b>>c>>k;
assert(c!=0);
p=9;
for (i=1;i<=9;i++)
{
valori[i]=val(p);
p=p*10+9;
}
if (a==0)
{
st=0;
}
else
{
st=val2(a-1);
}
valfin=val2(b)-st;
g<<valfin<<'\n';
g<<fixed<<setprecision(4)<<(double)valfin/(b-a+1);
return 0;
}