Cod sursa(job #344668)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 31 august 2009 12:16:11
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.23 kb
#include <algorithm>
using namespace std;

int r,d;

inline int min( int a, int b ) {

    if( a < b )
        return a;

    return b;
}

void solve() {

    int i, x, exp1, exp2, exp3, exp4, exp5, exp6, k = 0;

    scanf("%d%d",&r,&d);
    if( d == 4 ) {

        if( ( r & 1 ) == 0 ) {

            for( i = 0; i < r / 2; ++ i ) {

                for( x = r, exp1 = 0; x; exp1 += x /= 2 );
                for( x = i, exp2 = 0; x; exp2 += x /= 2 );
                for( x = r - i, exp3 = 0; x; exp3 += x /= 2 );
                if( exp1 / 2 > exp2 / 2 + exp3 / 2 )
                    k += 2;
            }
            for( x = r, exp1 = 0; x; exp1 += x /= 2 );
            for( x = r / 2, exp2 = 0; x; exp2 += x /= 2 );
            for( x = r / 2 + 1, exp3 = 0; x; exp3 += x /= 2 );
            if( exp1 / 2 > exp2 / 2 + exp3 / 2 )
                ++ k;
        }
        else if( ( r & 1 ) == 1 )
            for( i = 0; i <= r / 2; ++ i ) {

                for( x = r, exp1 = 0; x; exp1 += x /= 2 );
                for( x = i, exp2 = 0; x; exp2 += x /= 2 );
                for( x = r - i, exp3 = 0; x; exp3 += x /= 2 );
                if( exp1 / 2 > exp2 / 2 + exp3 / 2 )
                    k += 2;
            }
    }
    else if( d == 6 ) {

        if( ( r & 1 ) == 0 ) {

            for( i = 0; i < r / 2; ++ i ) {

                for( x = r, exp1 = 0; x; exp1 += x /= 2 );
                for( x = r, exp4 = 0; x; exp4 += x /= 3 );
                for( x = i, exp2 = 0; x; exp2 += x /= 2 );
                for( x = i, exp5 = 0; x; exp5 += x /= 3 );
                for( x = r - i, exp3 = 0; x; exp3 += x /= 2 );
                for( x = r - i, exp6 = 0; x; exp6 += x /= 3 );
                exp1 = min( exp1, exp4 );
                exp2 = min( exp2, exp5 );
                exp3 = min( exp3, exp6 );
                if( exp1 > exp2 + exp3 )
                    k += 2;
            }
            for( x = r, exp1 = 0; x; exp1 += x /= 2 );
            for( x = r, exp4 = 0; x; exp4 += x /= 3 );
            for( x = r / 2, exp2 = 0; x; exp2 += x /= 2 );
            for( x = r / 2, exp5 = 0; x; exp5 += x /= 3 );
            for( x = r / 2 + 1, exp3 = 0; x; exp3 += x /= 2 );
            for( x = r / 2 + 1, exp6 = 0; x; exp6 += x /= 3 );
            exp1 = min( exp1, exp4 );
            exp2 = min( exp2, exp5 );
            exp3 = min( exp3, exp6 );
            if( exp1 > exp2 + exp3 )
                ++ k;
        }
        else if( ( r & 1 ) == 1 )
            for( i = 0; i <= r / 2; ++ i ) {

                for( x = r, exp1 = 0; x; exp1 += x /= 2 );
                for( x = r, exp4 = 0; x; exp4 += x /= 3 );
                for( x = i, exp2 = 0; x; exp2 += x /= 2 );
                for( x = i, exp5 = 0; x; exp5 += x /= 3 );
                for( x = r - i, exp3 = 0; x; exp3 += x /= 2 );
                for( x = r - i, exp6 = 0; x; exp6 += x /= 3 );
                exp1 = min( exp1, exp4 );
                exp2 = min( exp2, exp5 );
                exp3 = min( exp3, exp6 );
                if( exp1 > exp2 + exp3 )
                    k += 2;
                }
    }
    else {

        if( ( r & 1 ) == 0 ) {

            for( i = 0; i < r / 2; ++ i ) {

                for( x = r, exp1 = 0; x; exp1 += x /= d );
                for( x = i, exp2 = 0; x; exp2 += x /= d );
                for( x = r - i, exp3 = 0; x; exp3 += x /= d );
                if( exp1 > exp2 + exp3 )
                    k += 2;
            }
            for( x = r, exp1 = 0; x; exp1 += x /= d );
            for( x = r / 2, exp2 = 0; x; exp2 += x /= d );
            for( x = r / 2 + 1, exp3 = 0; x; exp3 += x /= d );
            if( exp1 > exp2 + exp3 )
                ++ k;
        }
        else if( ( r & 1 ) == 1 )
            for( i = 0; i <= r / 2; ++ i ) {

                for( x = r, exp1 = 0; x; exp1 += x /= d );
                for( x = i, exp2 = 0; x; exp2 += x /= d );
                for( x = r - i, exp3 = 0; x; exp3 += x /= d );
                if( exp1 > exp2 + exp3 )
                    k += 2;
            }
    }
    printf( "%d", k );
}

int main() {

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

    solve();

    return 0;
}