Cod sursa(job #1672184)

Utilizator mateibanuBanu Matei Costin mateibanu Data 2 aprilie 2016 14:01:28
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>

using namespace std;

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

int ptr(long long d,long long l)
{
    long long p=d;
    long long nr=0;
    while (p<=l)
    {
        nr+=l/p;
        p*=d;
    }
    return nr;
}

int main()
{
    long long r,p,d,d1,ok=0,nr,nr1,i,x,s=0;
    fscanf(f,"%lld%lld",&r,&d);
    if (d%2==0&&d!=2) {d1=d/2;d=2;ok=1;}

    nr=ptr(d,r);

    if (ok)
    {
    nr1=ptr(d1,r);
    }
    long long fin=(r+1)/2;
    for (i=1;i<=fin;i++)
    {
        x=ptr(d,r-i+1)+ptr(d,i-1);
        if (nr-x>0) {s++;
        if (ok)  if (nr1-ptr(d1,r-i+1)-ptr(d1,i-1)<=0||(d==d1&&nr1/2-(ptr(d1,r-i+1)-ptr(d1,i-1))/2<=0)) s--;}
    }
    s*=2;
    if ((r+1)%2)
    {
        i=(r+1)/2+(r+1)%2;
        x=ptr(d,r-i+1)+ptr(d,i-1);
        if (nr-x>0) s++;
        if (ok)  if (nr1-ptr(d1,r-i+1)-ptr(d1,i-1)<=0||(d==d1&&nr1/2-ptr(d1,r-i+1)-ptr(d1,i-1)<=0)) s--;
    }
    fprintf(g,"%lld",s);
    fclose(g);
    fclose(f);
    return 0;
}