Cod sursa(job #324353)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 15 iunie 2009 21:27:23
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.44 kb
#include<stdio.h>

int a[5000001],i,r,d,b[5000001];
long long k;

int cat( int x, int y)
{   int nr=0;
    while(x%y==0) x/=y,nr++;
    return nr;
    

}    

int main()
{ 
  freopen("pascal.in","r",stdin);
  freopen("pascal.out","w",stdout);
  
  scanf("%d %d",&r,&d);
  if(r==0) { printf("0\n");
             fclose(stdin);
             fclose(stdout);
             return 0;
           }  
  if(r==1&&d==2) { printf("1\n");
                   fclose(stdin);
                   fclose(stdout);
                   return 0;
                  }
  else if(r==1&&d>2) { printf("0\n");
                       fclose(stdin);
                       fclose(stdout);
                       return 0;
                     }                          
 if(d==2||d==3||d==5) 
 { for(i=2;i<=r;i++){  a[i]=cat(i,d);
                       a[i]=a[i-1]+a[i];
                      
                   }
                   
   for(i=r/2;i>=1;--i)   if((a[r]-(a[r-i]+a[i]))>0) { 
                                                      if(r%2==0&&i==r/2) k+=1;
                                                      else k+=2;
                                                     }                          

 printf("%lld\n",k);

    fclose(stdin);
    fclose(stdout);

    return 0;
  }
 if(d==4) 
 { d=d/2;
   for(i=2;i<=r;i++){  a[i]=cat(i,d);
                       a[i]=a[i-1]+a[i];
                   }
                   
   for(i=r/2;i>=1;--i)   if((a[r]-(a[r-i]+a[i]))>1) {  if(r%2==0&&i==r/2) k+=1;
                                                      else k+=2; 
                                                    }                         

  printf("%lld\n",k);

    fclose(stdin);
    fclose(stdout);

    return 0;
  }
 if(d==6)
  {for(i=2;i<=r;i++){  a[i]=cat(i,d/2);
                       a[i]=a[i-1]+a[i];
                       
                       b[i]=cat(i,d/3);
                       b[i]=b[i-1]+b[i];
                   } 
   for(i=r/2;i>=1;--i)   if(((a[r]-(a[r-i]+a[i]))>0)&&((b[r]-(b[r-i]+b[i]))>0)) {  if(r%2==0&&i==r/2) k+=1;
                                                                                 else k+=2; 
                                                                               }                
   printf("%lld\n",k);

    fclose(stdin);
    fclose(stdout);

    return 0;
}                                                                              
          
}