Pagini recente » Cod sursa (job #1423189) | Cod sursa (job #643544) | Cod sursa (job #3261471) | Cod sursa (job #3277372) | Cod sursa (job #798314)
Cod sursa(job #798314)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fi("pascal.in");
ofstream fo("pascal.out");
int R, D, *f;
int *f2, *f3;
int compute()
{
int c = 0, lim_sup = (R + 1) / 2;
for(int i = 0; i < lim_sup; i++)
{
if(f[0] > f[i])
c++;
}
c = 2 * c;
if(R % 2 == 0)
{
if(f[0] > f[R / 2])
c++;
}
return c;
}
int compute6()
{
int c = 0, lim_sup = (R + 1) / 2;
for(int i = 0; i < lim_sup; i++)
{
if(f2[0] > f2[i] && f3[0] > f3[i])
c++;
}
c = 2 * c;
if(R % 2 == 0)
{
if(f2[0] > f2[R / 2] && f3[0] > f3[R / 2])
c++;
}
return c;
}
int compute4()
{
int c = 0, lim_sup = (R + 1) / 2;
for(int i = 0; i < lim_sup; i++)
{
if(f[0] > f[i] + 1)
c++;
}
c = 2 * c;
if(R % 2 == 0)
{
if(f[0] > f[R / 2] + 1)
c++;
}
return c;
}
inline int df2(int x)
{
return
x/2 + x/4 + x/8 + x/16 + x/32 + x/64 + x/128 + x/256 + x/512 +
x/1024 + x/2048 + x/4096 + x/8192 + x/16384 + x/32768 + x/65536 +
x/131072 + x/262144 + x/524288 + x/1048576 + x/2097152 + x/4194304;
}
inline int df3(int x)
{
return
x/3 + x/9 + x/27 + x/81 + x/243 + x/729 + x/2187 + x/6561 + x/19683 +
x/59049 + x/177147 + x/531441 + x/1594323 + x/4782969;
}
inline int df5(int x)
{
return
x/5 + x/25 + x/125 + x/625 + x/3125 + x/15625 + x/78125 + x/390625 +
x/1953125;
}
void pre2(int *f)
{
int need = (R + 1) / 2;
for(int i = 0; i <= need; i++)
f[i] = df2(i) + df2(R - i);
}
void pre3(int *f)
{
int need = (R + 1) / 2;
for(int i = 0; i <= need; i++)
f[i] = df3(i) + df3(R - i);
}
void pre5(int *f)
{
int need = (R + 1) / 2;
for(int i = 0; i <= need; i++)
f[i] = df5(i) + df5(R - i);
}
void pre()
{
f = new int[(R + 1) / 2 + 1];
if(D == 2) pre2(f);
else if(D == 3) pre3(f);
else if(D == 4) pre2(f);
else if(D == 5) pre5(f);
else if(D == 6)
{
f2 = new int[(R + 1) / 2 + 1];
f3 = new int[(R + 1) / 2 + 1];
pre2(f2);
pre3(f3);
}
else *((int*)0) = 0;
}
int main(int argc, char *argv[])
{
fi >> R >> D;
pre();
if(D == 2 || D == 3 || D == 5)
fo << compute() << endl;
else if(D == 4)
fo << compute4() << endl;
else if(D == 6)
fo << compute6() << endl;
fi.close();
fo.close();
return 0;
}