Cod sursa(job #2232508)

Utilizator czlateaZlatea Cezar czlatea Data 19 august 2018 19:34:11
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int ft[5000005];
int ftr[5000005];
int v[5000005];
int legend_re (int k, int l)
{
    int s = 0, cp = l;
    if (l == 2)
    {
        while (k / l)
        {
            s += k / l;
            l <<= 1;
        }
    }
    while (k / l > 0)
    {
        s += k / l;
        l *= cp;
    }
    return s;
}
int main()
{
    freopen ("pascal.in", "r", stdin);
    freopen ("pascal.out", "w", stdout);
    int r, d;
    int n = 0;
    scanf ("%d%d", &r, &d);
    int i;
    if (d == 4)
    {
        for (i = 0; i <= r; i ++)
        {
            if (i == 0)
                v[i] = legend_re (1, 2);
            else
                v[i] = legend_re (i, 2);
            //printf ("%d\n", v[i]);
        }
        for (i = 0; i <= r; i ++)
            if (v[r] - v[i] - v[r - i] > 1)
                n ++;
        printf ("%d", n);
    }
    else
    {
        if (d != 6)
        {
            for (i = 0; i <= r; i ++)
            {
                if (i == 0)
                    v[i] = legend_re (1, d);
                else
                    v[i] = legend_re (i, d);
                //printf ("%d\n", v[i]);
            }
            for (i = 0; i <= r; i ++)
                if (v[r] - v[i] - v[r - i] > 0)
                    n ++;
            printf ("%d", n);
        }
        else
        {
            for (i = 0; i <= r; i ++)
            {
                ft[i] = legend_re (i, 2);
                ftr[i] = legend_re (i, 3);
                //printf ("%d %d\n", ft[i], ftr[i]);
            }
            for (i = 0; i <= r / 2; i ++)
            {
                if (ft[r] - ft[i] - ft[r - i] > 0 and ftr[r] - ftr[i] - ftr[r - i] > 0)
                    n ++;
            }
            n *= 2;
            if ((n & 1) == 0)
             if (ft[r] - ft[r / 2] - ft[r / 2 - 1] > 0 and ftr[r] - ftr[r / 2] - ftr[r / 2 - 1] > 0)
                    n ++;
            printf ("%d", n);
        }
    }
    return 0;
}