Cod sursa(job #148968)

Utilizator katakunaCazacu Alexandru katakuna Data 5 martie 2008 08:46:53
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
#include<stdio.h>

long long v[4],t2[4],t1[4],c,c1,c2,xj2,b,xj,r,a,aux,xi,d,n,nr,i;



int main(){

FILE *f=fopen("pascal.in","r");
fscanf(f,"%lld %lld",&n,&d);
fclose(f);


if(d==4){
d=2;
xi=0;

  for(i=d;i<=n;i*=i){
  xi+=(n/i);
  }


b=xi;
xj=xi;
xj2=0;


  for(i=1;i<=n-1;i++){
  a=n-i+1;
  b=0;

    while(a%d==0){
    b++;
    a/=d;
    }

  aux=i;

  xj-=b;

  b=0;

   while(aux%d==0){
   b++;
   aux/=d;
   }

  xj2+=b;

  c=xi-(xj+xj2);
   if(c/2>=1)nr++;

}

}

else{

if(d==6){



 for(i=2;i<=n;i*=d){
 v[2]+=(n/i);
 }

 for(i=3;i<=n;i*=d){
 v[3]+=(n/i);
 }

t1[2]=v[2];
t1[3]=v[3];

int h;


   for(i=1;i<=(n-1)/2;i++){
   a=n-i+1;

      while(a%2==0){
      t1[2]--;
      a/=2;
      }

   a=n-i+1;

       while(a%3==0){
       t1[3]--;
       a/=3;
       }

   a=i;

      while(a%2==0){
      t2[2]++;
      a/=2;
      }

   a=i;

       while(a%3==0){
       t2[3]++;
       a/=3;
       }


    if((v[2]-(t1[2]+t2[2]))>0 && ( (v[3]-(t1[3]+t2[3]))>0 ) ){
    nr++;
    }


   }


nr*=2;

 if((n-1)%2==1){

   for(i=(n-1)/2+1;i<=(n-1)/2+1;i++){
   a=n-i+1;

      while(a%2==0){
      t1[2]--;
      a/=2;
      }

   a=n-i+1;

       while(a%3==0){
       t1[3]--;
       a/=3;
       }

   a=i;

      while(a%2==0){
      t2[2]++;
      a/=2;
      }

   a=i;

       while(a%3==0){
       t2[3]++;
       a/=3;
       }


    if((v[2]-(t1[2]+t2[2]))>0 && ( (v[3]-(t1[3]+t2[3]))>0 ) ){
    nr++;
    }


   }
 }

}


else{
i=d;
xi=0;

  for(i=d;i<=n;i*=i){
  xi+=(n/i);
  }


b=xi;
xj=xi;
xj2=0;

  for(i=1;i<=n-1;i++){
  a=n-i+1;
  b=0;

    while(a%d==0){
    b++;
    a/=d;
    }

  aux=i;

  xj-=b;

  b=0;

   while(aux%d==0){
   b++;
   aux/=d;
   }

  xj2+=b;

   if(xi>xj+xj2)nr++;


  }

}
}

 FILE *g=fopen("pascal.out","w");
 fprintf(g,"%lld",nr);
 fclose(g);


return 0;
}