Cod sursa(job #2488527)

Utilizator AndreiAlexandru2k3Ciucan Andrei Alexandru AndreiAlexandru2k3 Data 7 noiembrie 2019 00:24:12
Problema Pascal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <iostream>

using namespace std;

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

int r, d, nr, aaa;
int doi, trei;

int exp(int n, int p)
{
    int e = 0;
    while(n % p == 0)
    {
        e ++;
        n /= p;
    }
    return e;
}

int oare(int k)
{
    switch(d)
    {
    case 4:
    {
        return aaa - exp(k, 2) + exp(r - k + 1, 2);
        break;
    }
    case 6:
    {
        trei = trei - exp(k, 2) + exp(r - k + 1, 2);
        doi = doi - exp(k, 3) + exp(r - k + 1, 3) ;
        return min(doi, trei);
        break;
    }
    }
    return aaa + exp(r - k + 1, d) - exp(k, d);
}

void solve()
{
    int r2 = (r - 1) / 2, D;
    for(int k = 1; k <= r2; k++)
    {
        D = oare(k);
        if(d == 6)
        {
            nr += D > 0 ? 2 : 0;

        }
        else
        {
            if(d == 4) nr += D > 1 ? 2 : 0;
            else nr += D > 0 ? 2 : 0;
            aaa = D;
        }
    }
    if(r != 0 && r % 2 == 0)
    {
        D = oare(r / 2);
        if(d == 4) nr += D > 1 ? 1 : 0;
        else nr += D > 0 ? 1 : 0;
    }
}

void citire()
{
    f >> r >> d;
}

void afisare()
{
    g << nr;
}

int main()
{
    citire();
    solve();
    afisare();
    return 0;
}