Cod sursa(job #1703271)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 16 mai 2016 18:01:55
Problema Cifre Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>

using namespace std;

const int s = 10000;

int i,x, K,A,B,C, ans=0;
int power_ten[]={1,10,100,1000,10000};
int comb[7][7];

inline int cifre(int x)
{
    int cnt=0;
    if(!C && !x) return 1;
    while(x)
    {
         if(x%10==C) ++cnt;
         x/=10;
    }
    return cnt;
}
int main()
{
    freopen("cifre.in", "r", stdin);
    freopen("cifre.out", "w", stdout);

    scanf("%d%d%d%d", &A, &B, &C, &K);
    ans=0;

    comb[4][0]=comb[4][4]=1;
    comb[4][1]=comb[4][3]=4;
    comb[4][2]=6;

    for(i=A; (i%s!=0 || i<s) && i<=B; ++i)
        ans += (cifre(i)>=K);

    for(; i+s<=B; i+=s)
    {
        x = K - cifre(i/s);
        if(x<0) x=0;
        if(x<=4) ans += comb[4][x]*power_ten[4-x];
    }

    for(; i<=B; ++i)
        ans += (cifre(i)>=K);

    long double z=(double)ans/(B-A+1);
    printf("%.7Lf\n", z);

    return 0;
}