Cod sursa(job #1741080)

Utilizator mariusn01Marius Nicoli mariusn01 Data 12 august 2016 22:49:45
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
// c[n][k] = c[n][k-1] * k! / (n-k+1)!
// precalculez la fiecare numar puterea lui d care apare in el
// si cand trec de la o combinare la urmatoarea doar adun o putere si scad alta

#include <fstream>
#define DIM 5000010

using namespace std;

ifstream fin ("pascal.in");
ofstream fout("pascal.out");

int n, d, sol, c2, c3, c5;
int D[DIM], T[DIM], C[DIM];
int main () {
    fin>>n>>d;


    for (int i=2;i<=n;i++) {
        if (i%2 == 0)
            D[i] = 1 + D[i/2];
        if (i%3 == 0)
            T[i] = 1 + T[i/3];
        if (i%5 == 0)
            C[i] = 1 + C[i/5];
    }

    for (int i=1;i<=n;i++) {
        c2 += D[n-i+1] - D[i];
        c3 += T[n-i+1] - T[i];
        c5 += C[n-i+1] - C[i];

        if (d == 2&&c2)
            sol++;
        else
            if (d == 3 && c3)
                sol++;
            else
                if (d == 4 && c2 > 1)
                    sol++;
                else
                    if (d == 5 && c5)
                        sol++;
                    else
                        if (d == 6 && c2 && c3)
                            sol++;


    }

    fout<<sol;
    return 0;
}