Cod sursa(job #1465798)

Utilizator om6gaLungu Adrian om6ga Data 28 iulie 2015 00:00:23
Problema Pascal Scor 70
Compilator c Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <stdio.h>

#define RMAX 5000005

int R, D;


inline int pwr(int n, int div)
{
    int count = 0, aux = n;
    while(aux)
    {
        count += aux/div;
        aux /= div;
    }
    return count;
}

int nr(int r, int d)
{
    int count = 0, i, aux[3];
    
    for (i = 1; i <= r/2; i++)
    {
        switch(d)
        {
                 case 2:
                      count += (pwr(r,2)-pwr(i,2)-pwr(r-i,2) > 0 ? 1 : 0);
                      break;
                 case 3:
                      count += (pwr(r,3)-pwr(i,3)-pwr(r-i,3) > 0 ? 1 : 0);
                      break;
                 case 4:
                      count += (pwr(r,2)-pwr(i,2)-pwr(r-i,2) >= 2 ? 1 : 0);
                      break;
                 case 5:
                      count += (pwr(r,5)-pwr(i,5)-pwr(r-i,5) > 0 ? 1 : 0);
                      break;
                 case 6:
                      count += (((pwr(r,2)-pwr(i,2)-pwr(r-i,2) > 0) &&
                                 (pwr(r,3)-pwr(i,3)-pwr(r-i,3) > 0)) ? 1 : 0);
                      break;
        }
    }
    count *= 2;
    if ((r/2)*2 == r)
    {
        switch(d)
        {
                 case 2:
                      count -= (pwr(r,2)-2*pwr(r/2,2) > 0 ? 1 : 0);
                      break;
                 case 3:
                      count -= (pwr(r,3)-2*pwr(r/2,3) > 0 ? 1 : 0);
                      break;
                 case 4:
                      count -= (pwr(r,2)-2*pwr(r/2,2) >= 2 ? 1 : 0);
                      break;
                 case 5:
                      count -= (pwr(r,5)-2*pwr(r/2,5) > 0 ? 1 : 0);
                      break;
                 case 6:
                      count -= (((pwr(r,2)-2*pwr(r/2,2) > 0) && (pwr(r,3)-2*pwr(r/2,3) > 0)) ? 1 : 0);
        }    
    }  
    
    return count;   
}

int main()
{
    FILE *in, *out;
    in = fopen("pascal.in", "r");
    out = fopen("pascal.out", "w");
    fscanf(in, "%d %d", &R, &D);

    fprintf(out, "%d\n", nr(R, D));
    fclose(in);
    fclose(out);
    return 0;   
}