Cod sursa(job #2108380)

Utilizator nurof3nCioc Alex-Andrei nurof3n Data 18 ianuarie 2018 09:57:51
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");

int r, d, nr = 0, ant = 0, ant2, ant3;

int expp(int n, int p)
{
    int e = 0;
    while(n % p == 0)
    {
        e ++;
        n /= p;
    }
    return e;
}
int divid(int k)
{
    if(d == 6)
    {
        ant2 += expp(r - k + 1, 3) - expp(k, 3);
        ant3 += expp(r - k + 1, 2) - expp(k, 2);
        return min(ant2, ant3);
    }
    if(d == 4) return ant + expp(r - k + 1, 2) - expp(k, 2);
    return ant + expp(r - k + 1, d) - expp(k, d);
}
int main()
{
    f >> r >> d;
    int r2 = (r - 1) / 2, di;
    for(int k = 1; k <= r2; k++)
    {
        di = divid(k);
        if(d == 6)
        {
            nr += di > 0 ? 2 : 0;

        }
        else
        {
            if(d == 4) nr += di > 1 ? 2 : 0;
            else nr += di > 0 ? 2 : 0;
            ant = di;
        }
    }
    if(r != 0 && r % 2 == 0)
    {
        di = divid(r / 2);
        if(d == 4) nr += di > 1 ? 1 : 0;
        else nr += di > 0 ? 1 : 0;
    }
    g << nr;
    return 0;
}