Pagini recente » Cod sursa (job #226869) | Cod sursa (job #1544391) | Cod sursa (job #2108189) | Cod sursa (job #793056) | Cod sursa (job #1464558)
#include <cstdio>
#include <iostream>
#include <vector>
#include <set>
#include <cmath>
#include <climits>
#include <list>
#include <iomanip>
#include <cstdlib>
#include <fstream>
#include <map>
#include <algorithm>
#define nmax 500005
using namespace std;
int main() {
freopen("curatenie.in", "r", stdin);
freopen("curatenie.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(0);
int r, d;
cin >> r >> d;
int* f = new int[r + 1];
int* p = new int[r + 1];
p[0] = f[0] = 0;
int ans = 0;
if (r == 0) {
cout << 0;
return 0;
}
if (d == 2) {
for (int i = 1; i <= r; i++) {
f[i] = f[i - 1];
p[i] = 0;
if (i % d == 0) {
p[i] = p[i / d] + 1;
}
f[i] += p[i];
}
for (int i = 0; i + i < r; i++) {
if (f[r] - f[i] - f[r - i] > 0) {
ans += 2;
}
}
if (r % 2 == 0 && f[r] - 2 * f[r / 2] > 0) {
ans++;
}
} else if (d == 4) {
for (int i = 1; i <= r; i++) {
f[i] = f[i - 1];
p[i] = 0;
if (i % d == 0) {
p[i] = p[i / d] + 1;
}
f[i] += p[i];
}
for (int i = 0; i + i < r; i++) {
if (f[r] - f[i] - f[r - i] > 1) {
ans += 2;
}
}
if (r % 2 == 0 && f[r] - 2 * f[r / 2] > 1) {
ans++;
}
} else if (d == 3 || d == 6) {
d = 3;
for (int i = 1; i <= r; i++) {
f[i] = f[i - 1];
p[i] = 0;
if (i % d == 0) {
p[i] = p[i / d] + 1;
}
f[i] += p[i];
}
for (int i = 0; i + i < r; i++) {
if (f[r] - f[i] - f[r - i] > 0) {
ans += 2;
}
}
if (r % 2 == 0 && f[r] - 2 * f[r / 2] > 0) {
ans++;
}
} else {
for (int i = 1; i <= r; i++) {
f[i] = f[i - 1];
p[i] = 0;
if (i % d == 0) {
p[i] = p[i / d] + 1;
}
f[i] += p[i];
}
for (int i = 0; i + i < r; i++) {
if (f[r] - f[i] - f[r - i] > 0) {
ans += 2;
}
}
if (r % 2 == 0 && f[r] - 2 * f[r / 2] > 0) {
ans++;
}
}
cout << ans;
return 0;
}