Cod sursa(job #2770651)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 22 august 2021 13:46:38
Problema Pascal Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
//Ilie Dumitru
#include<cstdio>
typedef long long ll;

int p[3][5000005];

int get(int a, int x)
{
    int s=0;
    while(!(a%x))
        ++s, a/=x;
    return s;
}

void precomp(int R)
{
    int i;
    p[0][0]=p[0][1]=p[1][0]=p[1][1]=p[2][0]=p[2][1]=0;
    for(i=2;i<=R;++i)
    {
        p[0][i]=p[0][i-1]+get(i, 2);
        p[1][i]=p[1][i-1]+get(i, 3);
        p[2][i]=p[2][i-1]+get(i, 5);
    }
}

inline int min(int a, int b) {return a+(b-a)*(b<a);}

int main()
{
    FILE *f=fopen("pascal.in", "r"), *g=fopen("pascal.out", "w");
    int D, R, i, ans=0;
    fscanf(f, "%d%d", &R, &D);
    precomp(R);
    switch(D)
    {
    case 2:
        for(i=1;i<R;++i)
            ans+=(bool)(p[0][R]-p[0][i]-p[0][R-i]);
        break;
    case 3:
        for(i=1;i<R;++i)
            ans+=(bool)(p[1][R]-p[1][i]-p[1][R-i]);
        break;
    case 4:
        for(i=1;i<R;++i)
            ans+=(bool)((p[0][R]-p[0][i]-p[0][R-i])>>1);
        break;
    case 5:
        for(i=1;i<R;++i)
            ans+=(bool)(p[2][R]-p[2][i]-p[2][R-i]);
        break;
    case 6:
        for(i=1;i<R;++i)
            ans+=(bool)min(p[0][R]-p[0][i]-p[0][R-i], p[1][R]-p[1][i]-p[1][R-i]);
    }
    fprintf(g, "%d", ans);
    fclose(f);
    fclose(g);
    return 0;
}