Cod sursa(job #238057)

Utilizator razyelxrazyelx razyelx Data 31 decembrie 2008 12:52:50
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <stdio.h>

FILE*in  = fopen("pascal.in","r");
FILE*out = fopen("pascal.out","w");

struct fact_p { int doi;
		int trei;
		int cinci;
} x[5000001];

int main(){
    long long r,d,n;

    long long i,j,k,p,c=0;

    fscanf(in,"%lld%lld",&r,&d);

    if((r+1)%2 == 0) n = (r+1)/2;
    else             n = (r+1)/2+1;

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

       j=i;

       k=2;

       while(j>0 && k <=5){

	    p=0;

	    if(k==2)

	      while((j&1) == 0){ j = j >> 1; p++;}

	    else

	      while(j%k == 0){j/=k;p++;}


	    if(k == 2) x[i].doi  = x[i-1].doi   +p;
	    if(k == 3) x[i].trei = x[i-1].trei  +p;
	    if(k == 5) x[i].cinci= x[i-1].cinci +p;

	    k++;
       }

    }

    for(i=1;i<n;i++){

       if(d == 2){
	 p = x[r].doi - x[r-i].doi - x[i].doi;
	 if(p>0) c++;
	 continue;
       }
       if(d == 3){
	 p = x[r].trei - x[r-i].trei - x[i].trei;
	 if(p>0) c++;
	 continue;
       }
       if(d == 4){
	 p = x[r].doi - x[r-i].doi - x[i].doi;
	 if(p >= 2) c++;
	 continue;
       }
       if(d == 5){
	 p = x[r].cinci - x[r-i].cinci - x[i].cinci;
	 if(p>0) c++;
	 continue;
       }
       if(d == 6)
	 if(x[r].doi - x[r-i].doi - x[i].doi >0)
	   if(x[r].trei - x[r-i].trei - x[i].trei >0) c++;
    }

    if((r+1)%2 == 0) c = c * 2;
    else             c = c * 2 -1;

    fprintf(out,"%lld",c);
    return 0;
}