Cod sursa(job #2293335)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 30 noiembrie 2018 21:30:09
Problema Pascal Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>

using namespace std;

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

int R, D, ans;
int p2[5000005], p3[5000005], p5[5000005];

void Solve2()
{
    for(int i = 0; i <= R; i++)
    {
        int nr2 = p2[R] - p2[R - i] - p2[i];

        if(nr2 > 0)
            ans++;
    }
}

void Solve3()
{
    for(int i = 0; i <= R; i++)
    {
        int nr3 = p3[R] - p3[R - i] - p3[i];

        if(nr3 > 0)
            ans++;
    }
}

void Solve4()
{
    for(int i = 0; i <= R; i++)
    {
        int nr2 = p2[R] - p2[R - i] - p2[i];

        if(nr2 > 1)
            ans++;
    }
}

void Solve5()
{
    for(int i = 0; i <= R; i++)
    {
        int nr5= p5[R] - p5[R - i] - p5[i];

        if(nr5 > 0)
            ans++;
    }
}

void Solve6()
{
    for(int i = 0; i <= R; i++)
    {
        int nr2 = p2[R] - p2[R - i] - p2[i];
        int nr3 = p3[R] - p3[R - i] - p3[i];

        if(nr2 > 0 && nr3 > 0)
            ans++;
    }
}

int main()
{
    fin >> R >> D;

    for(int i = 1; i <= R; i++)
    {
        if(i % 2 == 0)
            p2[i] = p2[i / 2] + 1;
        if(i % 3 == 0)
            p3[i] = p3[i / 3] + 1;
        if(i % 5 == 0)
            p5[i] = p5[i / 5] + 1;
    }

    for(int i = 2; i <= R; i++)
    {
        p2[i] += p2[i - 1];
        p3[i] += p3[i - 1];
        p5[i] += p5[i - 1];
    }

    if(D == 2)
        Solve2();
    else if(D == 3)
        Solve3();
    else if(D == 4)
        Solve4();
    else if(D == 5)
        Solve5();
    else
        Solve6();

    fout << ans;

    return 0;
}