Cod sursa(job #247514)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 23 ianuarie 2009 10:00:57
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include<algorithm>
using namespace std;
int r,d;
void solve(){
    int i,x,exp1,exp2,exp3,k=0;
    scanf("%d%d",&r,&d);
    if(d==4){
        if(r%2==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%2==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(r%2==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%2==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;}