Cod sursa(job #858343)

Utilizator stoicatheoFlirk Navok stoicatheo Data 18 ianuarie 2013 20:28:22
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <cassert>
#define dim 5000005;
 
int v[6],dp[6];
 
int asdp(int k)
{
    while(k%2==0)
    {
        --v[2];
        k/=2;
    }
    while(k%3==0)
    {
        --v[3];
        k/=3;
    }
    while(k%5==0)
    {
        --v[5];
        k/=5;
    }
}
 
int asdm(int k)
{
    while(k%2==0)
    {
        ++v[2];
        k/=2;
    }
    while(k%3==0)
    {
        ++v[3];
        k/=3;
    }
    while(k%5==0)
    {
        ++v[5];
        k/=5;
    }
}
 
int main()
{
    int i=1,n=0,d=0,sol=0,aux=0,m=0;
 
    assert(freopen("pascal.in","r",stdin));
    assert(freopen("pascal.out","w",stdout));
 
    assert(scanf("%d%d",&n,&d));
    m=n/2;
 
    while(d%2==0)
    {
        ++dp[2];
        d/=2;
    }
 
    while(d%3==0)
    {
        ++dp[3];
        d/=3;
    }
 
    while(d%5==0)
    {
        ++dp[5];
        d/=5;
    }
 
    for(i=1; i<m+1; ++i)
    {
        asdm(n-i+1);
        asdp(i);
 
        if(v[2]>=dp[2] && v[3]>=dp[3] && v[5]>=dp[5])
        {
            if(n==i+i)
                ++sol;
            else
                sol=sol+2;
        }
    }
 
    assert(printf("%d\n",sol));
 
    return 0;
}