Cod sursa(job #2217822)

Utilizator alextodoranTodoran Alexandru Raul alextodoran Data 2 iulie 2018 12:59:42
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>

#define RM 5000002

using namespace std;

int r, m, k;
int e2[RM], f2[RM];
int e3[RM], f3[RM];
int e5[RM], f5[RM];

int exp(int n, int p)
{
    if(p == 2)
        return f2[n];
    else if(p == 3)
        return f3[n];
    else if(p == 4)
        return f2[n] / 2;
    else if(p == 5)
        return f5[n];
    else if(p == 6)
        return min(f2[n], f3[n]);
}

int main()
{
    ifstream fin ("pascal.in");
    ofstream fout ("pascal.out");
    fin >> r >> m;
    for(int i = 1; i <= r; i++)
        if(i % 2)
            e2[i] = 0;
        else
            e2[i] = e2[i / 2] + 1;
    for(int i = 1; i <= r; i++)
        if(i % 3)
            e3[i] = 0;
        else
            e3[i] = e3[i / 3] + 1;
    for(int i = 1; i <= r; i++)
        if(i % 5)
            e5[i] = 0;
        else
            e5[i] = e5[i / 5] + 1;
    for(int i = 0; i <= r; i++)
        f2[i] = f2[i - 1] + e2[i];
    for(int i = 0; i <= r; i++)
        f3[i] = f3[i - 1] + e3[i];
    for(int i = 0; i <= r; i++)
        f5[i] = f5[i - 1] + e5[i];
    for(int i = 0; i <= r; i++)
        if(exp(r, m) > exp(i, m) + exp(r - i, m))
            k++;
    fout << k << "\n";
    return 0;
}