Cod sursa(job #801515)

Utilizator SchumiDumitru Andrei Georgian Schumi Data 24 octombrie 2012 16:27:50
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cassert>
#include <cstdio>

using namespace std;

const int N = 5000005;

int n, d, sol, doi, trei, cinci, x, y;
int exp2[N], exp3[N], exp5[N];

int main() {
    assert(freopen("pascal.in", "r", stdin) != NULL);
    assert(freopen("pascal.out", "w", stdout) != NULL);

    assert(scanf("%d %d", &n, &d) == 2);

    for (int i = 1; i <= n; ++i) {
        if (i % 2 == 0)
            exp2[i] = exp2[i / 2] + 1;
        if (i % 3 == 0)
            exp3[i] = exp3[i / 3] + 1;
        if (i % 5 == 0)
            exp5[i] = exp5[i / 5] + 1;
    }

    for (int i = 1; i <= n; ++i) {
        x = i;
        y = n - i + 1;

        doi = doi - exp2[x] + exp2[y];
        trei = trei - exp3[x] + exp3[y];
        cinci = cinci - exp5[x] + exp5[y];

        if (d == 2 && doi > 0)
            ++sol;
        if (d == 3 && trei > 0)
            ++sol;
        if (d == 4 && doi > 1)
            ++sol;
        if (d == 5 && cinci > 0)
            ++sol;
        if (d == 6 && doi > 0 && trei > 0)
            ++sol;
    }

    printf("%d\n", sol);
}