Cod sursa(job #2210433)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 6 iunie 2018 18:32:00
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>

using namespace std;

const int N = 5000005;

int p2[N], p3[N], p5[N], d[3], cd[3];

int ant, n, dv, t;


int main()
{

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

    if (dv % 2 == 0)
        {
            for (int i = 2; i <= n; ++i)
            {
                if (i % 2 == 0) p2[i] = p2[i / 2] + 1;
            }
        }

    if (dv % 3 == 0)
        {
            for (int i = 2; i <= n; ++i)
            {
                if (i % 3 == 0)
                {
                    p3[i] = p3[i / 3] + 1;
                }
            }
        }

    if (dv % 5 == 0)
        {
            for (int i = 2; i <= n; ++i)
            {
                if (i % 5 == 0)
                {
                    p5[i] = p5[i / 5] + 1;
                }
            }
        }

    if (dv % 2 == 0)
    {
        d[0]+= 1;
    }
    if (dv % 3 == 0)
    {
        d[1]+= 1;
    }
    if (dv % 4 == 0)
    {
        d[0]+= 1;
    }
    if (dv % 5 == 0)
    {
        d[2]+= 1;
    }
    for (int i = 1; i <= n; ++i)
    {
        cd[0]+=p2[n-i+1]-p2[i];
        cd[1]+=p3[n-i+1]-p3[i];
        cd[2]+=p5[n-i+1]-p5[i];

        if (cd[0]>=d[0]&&cd[1]>=d[1]&&cd[2]>=d[2])
        {
            ant+=1;
        }
    }
    fout<<ant<<endl;
    return 0;
}