Cod sursa(job #1464558)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 23 iulie 2015 21:19:17
Problema Pascal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.62 kb
#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;
}