Mai intai trebuie sa te autentifici.

Cod sursa(job #1217368)

Utilizator nicolaegutaNicolae Guta nicolaeguta Data 7 august 2014 10:51:43
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <cstdio>
#define Nmax 5000005

using namespace std;

int logg[Nmax],dp[Nmax];
bool viz[Nmax];

int main()
{
    int N,D,d,i,sol=0;
    freopen ("pascal.in","r",stdin);
    freopen ("pascal.out","w",stdout);
    scanf("%d%d", &N,&D);
    if(D!=6)
    {
        if(D==4)
            d=2;
        else
            d=D;
        logg[d]=1;
        for(i=d+1;i<=N;++i)
            if(i%d==0)
                logg[i]=logg[i/d]+1;
        for(i=2;i<=N;++i)
            dp[i]=dp[i-1]+logg[i];
        for(i=0;i<=N;++i)
        {
            if(D==4)
            {
                if(dp[N]-dp[i]-dp[N-i]>1)
                    ++sol;
            }
            else
                if(dp[N]>dp[i]+dp[N-i])
                    ++sol;
        }
        printf("%d\n", sol);
    }
    else
    {
        d=2;
        logg[0]=logg[1]=0; logg[d]=1;
        for(i=d+1;i<=N;++i)
            if(i%d==0)
                logg[i]=logg[i/d]+1;
        for(i=2;i<=N;++i)
            dp[i]=dp[i-1]+logg[i];
        for(i=0;i<=N;++i)
            if(dp[N]>dp[i]+dp[N-i])
                viz[i]=true;
            else
                viz[i]=false;

        d=3;
        logg[0]=logg[1]=logg[2]=0; logg[d]=1;
        for(i=d+1;i<=N;++i)
            if(i%d==0)
                logg[i]=logg[i/d]+1;
            else
                logg[i]=0;
        for(i=2;i<=N;++i)
            dp[i]=dp[i-1]+logg[i];
        for(i=0;i<=N;++i)
            if(dp[N]>dp[i]+dp[N-i] && viz[i])
                ++sol;
        printf("%d\n", sol);
    }
    return 0;
}