Cod sursa(job #1217240)

Utilizator smaraldaSmaranda Dinu smaralda Data 6 august 2014 22:24:02
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include<stdio.h>
#include<math.h>

const int RMAX = 5e6;
int r, d;

int  min2, min3, min5, p2[RMAX + 5], p3[RMAX + 5], p5[RMAX + 5];
int xp2[RMAX + 5], xp3[RMAX + 5], xp5[RMAX + 5];

inline int check (int k) {
    return p2[r] - p2[r - k] - p2[k] >= min2 && p3[r] - p3[r - k] - p3[k] >= min3 && p5[r] - p5[r - k] - p5[k] >= min5;
}

int main() {
    freopen("pascal.in", "r", stdin);
    freopen("pascal.out", "w", stdout);
    int j, jum, cj, num, d2, d3, d5;

    scanf("%d%d", &r, &d);
    jum = r / 2;

    min2 = min3 = min5 =0;
    if(d == 2)
        min2 = 1;
    if(d == 3)
        min3 = 1;
    if(d == 4)
        min2 = 2;
    if(d == 5)
        min5 = 1;
    if(d == 6)
        min2 = min3 = 1;
    
    for(j = 2; j <= r; ++ j) {
        if((j & 1) == 0)
            p2[j] = p2[j - 1] + xp2[j / 2] + 1,
            xp2[j] = xp2[j / 2] + 1;
        else
            p2[j] = p2[j - 1];

        if(j % 3 == 0)
            p3[j] = p3[j - 1] + xp3[j / 3] + 1,
            xp3[j] = xp3[j / 3] + 1;
        else
            p3[j] = p3[j - 1];

        if(j % 5 == 0)
            p5[j] = p5[j - 1] + xp5[j / 5] + 1,
            xp5[j] = xp5[j / 5] + 1;
        else
            p5[j] = p5[j - 1];
   //     fprintf(stderr, "%d %d %d\n", p2[j], p3[j], p5[j]);
    }

    num = 0;
    for(j = 1; j <= jum; ++ j)
        if(p2[r] - p2[r - j] - p2[j] >= min2 && p3[r] - p3[r- j] - p3[j] >= min3 && p5[r] - p5[r - j] - p5[j] >= min5)
            num += 2;    
    if(r % 2 == 0)
        num -= check(jum);

    printf("%d\n", num);
    return 0;
}