Cod sursa(job #1146202)

Utilizator PatrikStepan Patrik Patrik Data 18 martie 2014 19:58:35
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
    #include<cstdio>
    #include<iostream>
    using namespace std;
    int R , D , rez , nr , num  , nr1 , num1 , N;

    int find(int d , int n);

    int main()
    {
        freopen("pascal.in" , "r" , stdin );
        freopen("pascal.out" , "w" , stdout );
        scanf("%d%d" , &R , &D );
        if(D == 4)
        {
            nr = find(2,R);
            for(int i = 1 ; i <= (R-1)/2 ; ++i )
            {
                num = find(2,R-i) + find(2,i);
                rez +=(nr-num>1);
            }
            rez = 2*rez;
            if((R-1)%2)
            {
                num = find(2,R-((R-1)/2+1)) + find(2,(R-1)/2+1);
                rez += (nr - num >1);
            }
        }
        else
            if(D == 6)
        {
            nr = find(2,R);
            nr1 = find(3,R);
            for(int i = 1 ; i <= (R-1)/2 ; ++i )
            {
                num = find(2,R-i)+find(2,i);
                num1 = find(3,R-i)+find(3,i);
                rez += (nr1 > num1 && nr > num);
            }
            rez = rez*2;
            if((R-1)%2)
            {
                int mij = (R-1)/2+1;
                num = find(2,R-mij)+find(2,mij);
                num1 = find(3,R-mij)+find(3,mij);
                rez += (nr1 > num1 && nr > num);
            }
        }
        else
        {
            nr = find(D,R);
            for(int i = 1 ; i<= (R-1)/2 ; ++i )
            {
                num = find(D,R-i)+find(D,i);
                rez += (nr> num);
            }
            rez = rez*2;
            if((R-1)%2)
            {
                int mij = (R-1)/2+1;
                num = find(D,R-mij)+find(D,mij);
                rez += (nr> num);
            }
        }
        printf("%d" , rez);
        return 0;
    }

    int find(int d , int n)
    {
        int aux = d , ret = 0;
        while(aux <= n)
        {
            ret += n/aux;
            aux *=d;
        }
        return ret;
    }