Mai intai trebuie sa te autentifici.
Cod sursa(job #1217368)
Utilizator | 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;
}