Cod sursa(job #289874)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 27 martie 2009 09:11:39
Problema Pascal Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.98 kb
#include<algorithm>
using namespace std;
int r,d;
void solve(){
    int i,x,exp1,exp2,exp3,exp4,exp5,exp6,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-exp2-exp3>1)
                    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-exp2-exp3>1)
                ++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-exp2-exp3>1)
                    k+=2;}}
    else if(d==6){
        if(r%2==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);           
                if(exp1>exp2+exp3&&exp4>exp5+exp6)
                    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);
            if(exp1>exp2+exp3&&exp4>exp5+exp6)
                ++k;}
        else if(r%2==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);
                if(exp1>exp2+exp3&&exp4>exp5+exp6)
                    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;}