Cod sursa(job #240732)

Utilizator DraStiKDragos Oprica DraStiK Data 8 ianuarie 2009 13:48:57
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <stdio.h>
#define DIM 5005
int a[DIM],b[DIM];
int r,d,nrt;
int fact (int x,int d)
{
    int s=0;
    while (x/d)
    {
        s+=x/d;
        x/=d;
    }
    return s;
}
int main ()
{
    freopen ("pascal.in","r",stdin);
    freopen ("pascal.out","w",stdout);    
    int i;
    scanf ("%d%d",&r,&d);
    if (d==2 || d==3 || d==5)
    {
        for (i=1; i<=r; ++i)
            a[i]=fact (i,d);
        if (r%2==0)
        {
            for (i=1; i<r/2; ++i)
                if (a[r]-a[i]-a[r-i]>0)
                    nrt+=2;
            if (a[r]-a[r/2]-a[r-r/2]>0)
                ++nrt;
        }
        else
        {
            for (i=1; i<=r/2; ++i)
                if (a[r]-a[i]-a[r-i]>0)
                    nrt+=2;
        }
    }
    else if (d==4)
    {
        for (i=1; i<=r; ++i)
            a[i]=fact (i,2);
        if (r%2==0)
        {
            for (i=1; i<r/2; ++i)
                if (a[r]-a[i]-a[r-i]>1)
                    nrt+=2;
            if (a[r]-a[r/2]-a[r-r/2]>1)
                ++nrt;
        }
        else
        {
            for (i=1; i<=r/2; ++i)
                if (a[r]-a[i]-a[r-i]>1)
                    nrt+=2;
        }   
    }
    else if (d==6)
    {        
        for (i=1; i<=r; ++i)
        {
            a[i]=fact (i,2);
            b[i]=fact (i,3);
        }
        if (r%2==0)
        {
            for (i=1; i<r/2; ++i)
                if (a[r]-a[i]-a[r-i]>0 && b[r]-b[i]-b[r-i]>0)
                    nrt+=2;
            if (a[r]-a[r/2]-a[r-r/2]>0 && b[r]-b[r/2]-b[r-r/2]>0)
                ++nrt;
        }
        else
        {
            for (i=1; i<=r/2; ++i)
                if (a[r]-a[i]-a[i-r]>0 && b[r]-b[i]-b[r-i]>0)
                    nrt+=2;
        }
    }
    printf ("%d",nrt);
    return 0;
}