Pagini recente » Cod sursa (job #2174524) | Cod sursa (job #2429965) | Cod sursa (job #1137430) | Cod sursa (job #1217499) | Cod sursa (job #3250931)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
int r, d;
int fr[5000005];
static inline int exp(int x,int y)
{
int rez = 0;
if (x == 0)return 0;
int cy = y;
while(x >= cy){
rez += x / cy;
cy *= y;
}
return rez;
}
int main()
{
f >> r >> d;
int rez = 0;
int nr;
nr = r / 2 + 1;
if (r == 0){
g << 0;
return 0;
}
int ceva1 = 0;
if (d == 6)ceva1 = exp(r,3),fr[r] = ceva1;
else if (d == 4)ceva1 = exp(r,2) / 2,fr[r] = ceva1 * 2;
else ceva1 = exp(r,d),fr[r] = ceva1;
bool ok = false;
for (int i = 0;i < nr;i++){
int cr = rez;
if (d != 6 && d != 4){
int ceva2 = 0,ceva3 = 0;
if (fr[r-i] == 0)ceva2 = exp(r-i,d),fr[r-i] = ceva2;
else ceva2 = fr[r-i];
if (fr[i] == 0)ceva3 = exp(i,d),fr[i] = ceva3;
else ceva3 = fr[i];
if (ceva1 - ceva2 - ceva3 > 0)rez++;
//cout << ceva1 << " " << ceva2 << " " << ceva3 << '\n';
}
else if (d == 6){
int ceva2 = 0;
int ceva3 = 0;
if (fr[r-i] == 0)ceva2 = exp(r-i,3),fr[r-i] = ceva2;
else ceva2 = fr[r-i];
if (fr[i] == 0)ceva3 = exp(i,3),fr[i] = ceva3;
else ceva3 = fr[i];
int exp6 = ceva2 + ceva3;
if (ceva1 - exp6 > 0)rez++;
}
else if (d == 4){
int ceva2 = 0;
int ceva3 = 0;
if (fr[r-i] == 0)ceva2 = exp(r-i,2),fr[r-i] = ceva2;
else ceva2 = fr[r-i];
if (fr[i] == 0)ceva3 = exp(i,2),fr[i] = ceva3;
else ceva3 = fr[i];
int exp4 = (ceva2 + ceva3) / 2;
if (ceva1 - exp4 > 0)rez++;
//cout << ceva1 << " " << ceva2 << " " << ceva3 << " " << exp4 << '\n';
}
if (cr == rez - 1 && i == nr - 1)ok = true;
//cout << exp(r,d) << " " << exp((r-i),d) << " " << exp(i,d) << '\n';
}
if (r % 2 == 1)g << rez * 2;
else{
if (rez > 0){
if (ok == true)g << rez * 2 - 1;
else g << rez * 2;
}
else g << 0;
}
}