Cod sursa(job #2015203)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 25 august 2017 15:05:55
Problema Pascal Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <stdio.h>
#include <stdlib.h>
int l1[5000001],l2[5000001];
int main()
{
    int r,d,ct=0,i,x,nr,nr1,j,nr2,p,y;
    freopen("pascal.in","r",stdin);
    freopen("pascal.out","w",stdout);
    scanf("%d%d",&r,&d);
    if(d==4) d=2,ct=1;
    for(i=1; i<=r; i++)
    {
        x=d;
        if(x==6)
        {
            x=2;
            while(x<=i)
                l1[i]+=(i/x),x*=2;
            x=3;
            while(x<=i)
                l2[i]+=(i/x),x*=3;
        }
        else
        {
            p=x;
            while(p<=i)
                l1[i]+=(i/p),p*=x;
        }
    }
    nr=0;
    for(i=1; i<=(r-1)/2; i++)
    {
        x=l1[r]-l1[i]-l1[r-i];
        y=l2[r]-l2[i]-l2[r-i];
        switch(d)
        {
            case 2:
                if(d==1) x/=2;
                if(x>0) nr+=2;
                break;
            case 3:
                if(x>0) nr+=2;
                break;
            case 5:
                if(x>0) nr+=2;
                break;
            case 6:
                if(x>0 && y>0) nr+=2;
                break;
        }
    }
    if(r%2==0){
        x=l1[r]-l1[i]-l1[r-i];
        y=l2[r]-l2[i]-l2[r-i];
        switch(d)
        {
            case 2:
                if(d==1) x/=2;
                if(x>0) nr+=1;
                break;
            case 3:
                if(x>0) nr+=1;
                break;
            case 5:
                if(x>0) nr+=1;
                break;
            case 6:
                if(x>0 && y>0) nr+=1;
                break;
        }
    }
    printf("%d\n",nr);

    return 0;
}