Cod sursa(job #1766216)

Utilizator SburlyAndrei Florin Sburly Data 27 septembrie 2016 18:25:22
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <fstream>
#include <math.h>

using namespace std;

unsigned long int r;
int d;

unsigned int nr2[2500000], nr3[2500000], nr5[2500000];

int calcdiv(int nr, int d)
{
    int temp = nr;
    int p = d;
    int val = temp/p;
    int sol = 0;
    while(val)
    {
        sol += val;
        p*=d;
        val = temp/p;
    }
    return sol;
}

bool b = false;
bool b2 = false;

int main()
{
    ifstream f("pascal.in");
    ofstream g("pascal.out");

    f >> r >> d;

    int r2 = r/2+1;

    if(r%2 == 0)
    {
        b = true;
    }

    int lv2 = calcdiv(r,2);
    int lv3 = calcdiv(r,3);
    int lv5 = calcdiv(r,5);

    for(unsigned int i = 0; i < r2; i++)
    {
        nr2[i] = lv2 - calcdiv(r-i,2) - calcdiv(i,2);
    }
    for(unsigned int i = 0; i < r2; i++)
    {
        nr3[i] = lv3 - calcdiv(r-i,3) - calcdiv(i,3);
    }
    for(unsigned int i = 0; i < r2; i++)
    {
        nr5[i] = lv5 - calcdiv(r-i,5) - calcdiv(i,5);
    }

    if(b) r2--;

    int k = 0;
    if(d == 2)
    {
        for(unsigned int i = 0; i < r2; i++)
        {
            if(nr2[i] != 0) k++;
        }
        if(b) if(nr2[r2] != 0) b2 = true;
    }
    else
    if(d == 3)
    {
        for(unsigned int i = 0; i < r2; i++)
        {
            if(nr3[i] != 0) k++;
        }

        if(b) if(nr3[r2] != 0) b2 = true;
    }
    else
    if(d == 4)
    {
        for(unsigned int i = 0; i < r2; i++)
        {
            if(nr2[i] >= 2) k++;
        }
        if(b) if(nr2[r2] >= 2) b2 = true;
    }
    else
    if(d == 5)
    {
        for(unsigned int i = 0; i < r2; i++)
        {
            if(nr5[i] != 0) k++;
        }
        if(b) if(nr5[r2] != 0) b2 = true;
    }
    else
    if(d == 6)
    {
        for(unsigned int i = 0; i < r2; i++)
        {
            if(nr2[i] != 0 && nr3[i] != 0) k++;
        }
        if(b) if(nr2[r2] != 0 && nr3[r2] != 0) b2 = true;
    }

    if(r == 2 && d == 2)
        g << 1;
    else
    if(b2)
        g << k*2+1;
    else
        g << k*2;


    return 0;
}