Pagini recente » Cod sursa (job #907011) | Cod sursa (job #1082560) | Cod sursa (job #935399) | Cod sursa (job #600348) | Cod sursa (job #2770654)
//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, N, i, ans=0, x=0;
fscanf(f, "%d%d", &R, &D);
precomp(R);
N=(R-1)>>1;
switch(D)
{
case 2:
for(i=1;i<=N;++i)
ans+=(p[0][R]>p[0][i]+p[0][R-i]);
if(!(R&1))
x=(p[0][R]>p[0][i]+p[0][R-i]);
break;
case 3:
for(i=1;i<=N;++i)
ans+=(p[1][R]>p[1][i]+p[1][R-i]);
if(!(R&1))
x=(p[1][R]>p[1][i]+p[1][R-i]);
break;
case 4:
for(i=1;i<=N;++i)
ans=((p[0][R]>>1)>((p[0][i]+p[0][R-i])>>1));
if(!(R&1))
x=((p[0][R]>>1)>(p[0][i]+p[0][R-i])>>1);
break;
case 5:
for(i=1;i<=N;++i)
ans+=(p[2][R]>p[2][i]+p[2][R-i]);
if(!(R&1))
x=(p[2][R]>p[2][i]+p[2][R-i]);
break;
case 6:
for(i=1;i<=N;++i)
ans+=(p[0][R]>p[0][i]+p[0][R-i])*(p[1][R]>p[1][i]+p[1][R-i]);
if(!(R&1))
x=(p[0][R]>p[0][i]+p[0][R-i])*(p[1][R]>p[1][i]+p[1][R-i]);
}
fprintf(g, "%d", (ans<<1)+x);
fclose(f);
fclose(g);
return 0;
}