Cod sursa(job #844684)

Utilizator Athena99Anghel Anca Athena99 Data 29 decembrie 2012 18:17:53
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <cassert>
#include <cstdio>

int n=0;

int doi(int k)
{
    int i=0,m=k,x=0,nr=2;
    while (m/2>0)
    {
        m/=2;
        ++i;
    }
    m=i;
    for (i=0; i<m; ++i)
    {
        x=x+(k/nr);
        nr=nr+nr;
    }

    return x;
}

int trei(int k)
{
    int i=0,m=k,x=0,nr=3;
    while (m/3>0)
    {
        m/=3;
        ++i;
    }
    m=i;
    for (i=0; i<m; ++i)
    {
        x=x+(k/nr);
        nr=nr+nr+nr;
    }

    return x;
}

int cinci(int k)
{
    int i=0,m=k,x=0,nr=5;
    while (m/5>0)
    {
        m/=5;
        ++i;
    }
    m=i;
    for (i=0; i<m; ++i)
    {
        x=x+(k/nr);
        nr=nr+nr+nr+nr+nr;
    }

    return x;
}

int main()
{
    int d=0,d2=0,d3=0,d5=0,i=0,sol=0;

    assert(freopen("pascal.in","r",stdin));
    assert(freopen("pascal.out","w",stdout));

    scanf("%d%d",&n,&d);

    d2=doi(n);
    d3=trei(n);
    d5=cinci(n);

    for (i=0; i<n; ++i)
        if (d==2)
        {
            if (doi(i)+doi(n-i)<d2)
                ++sol;
        }
        else if (d==3)
        {
            if (trei(i)+trei(n-i)<d3)
                ++sol;
        }
        else if (d==4)
        {
            if (doi(i)+doi(n-i)+1<d2)
                ++sol;
        }
        else if (d==5)
        {
            if (cinci(i)+cinci(n-i)<d5)
                ++sol;
        }
        else if (d==6)
        {
            if (doi(i)+doi(n-i)<d2 && trei(i)+trei(n-i)<d3)
                ++sol;
        }

    assert(printf("%d\n",sol));

    return 0;
}