Cod sursa(job #1969809)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 18 aprilie 2017 17:38:24
Problema Pascal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("pascal.in","r");
FILE *g=fopen("pascal.out","w");
int F[4];
int E[4];
int r[4];
int D;
int R;
void desc(int D)
{
    if(D==2){F[0]=E[1]=1;F[1]=2;}
    else if(D==3){F[0]=E[1]=1;F[1]=3;}
    else if(D==4){F[0]=1;E[1]=2;F[1]=2;}
    else if(D==5){F[0]=1;E[1]=1;F[1]=5;}
    else if(D==6){F[0]=2;E[1]=1;E[2]=1;F[1]=2;F[2]=3;}
}
int mod(int val,int sgn)
{
    for(int i=1;i<=F[0];i++)
    {
        int p1=F[i];
        while(p1<=val)
        {
            r[i]+=sgn;
            p1*=F[i];
        }
    }
}
bool eval()
{
    int R=(1<<30);
    for(int i=1;i<=F[0];i++)
        R=min(R,r[i]/E[i]);
    return R>0;
}
int main()
{
    fscanf(f,"%d %d",&R,&D);
    desc(D);
    int rez=0;
    for(int i=1;i<(R+1)/2+(R+1)%2;i++)
    {
        mod(R-i+1,1);
        mod(i,-1);
        if(eval())
            rez+=(1+(2*i!=R));
    }
    fprintf(g,"%d",rez);
    fclose(f);
    fclose(g);
    return 0;
}