Cod sursa(job #1607339)

Utilizator cristina_borzaCristina Borza cristina_borza Data 20 februarie 2016 23:47:19
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <cstdio>

#define NMAX 5000005

using namespace std;

int sum2 , sum3 , sum5 , p2 , p3 , p5 , sol[10] , n , d;
short int v[NMAX][3];

void read(int &x) {
    int sign = 1;
    char ch;

    while(!isdigit(ch = getchar())) {
        if(ch == '-') {
            sign = -1;
        }

        else {
            sign = 1;
        }
    }

    do {
        x = x * 10 + ch - '0';
    }while(isdigit(ch = getchar()));

    x *= sign;
}

int main() {
    freopen("pascal.in" , "r" , stdin);
    freopen("pascal.out" , "w" , stdout);

    read(n) , read(d);

    for(int i = 1 ; i <= n ; ++i) {
        if(i % 2 == 0) {
            v[i][0] = v[i / 2][0] + 1;
        }
        if(i % 3 == 0) {
            v[i][1] = v[i / 3][1] + 1;
        }
        if(i % 5 == 0) {
            v[i][2] = v[i / 5][2] + 1;
        }

        sum2 += v[i][0];
        sum3 += v[i][1];
        sum5 += v[i][2];
    }

    p2 = sum2;
    p3 = sum3;
    p5 = sum5;
    for(int i = 1 ; i <= n ; ++i) {
        p2 = p2 + v[i][0] - v[n - i + 1][0];
        p3 = p3 + v[i][1] - v[n - i + 1][1];
        p5 = p5 + v[i][2] - v[n - i + 1][2];
        if(p2 != sum2) {
            ++sol[2];
        }

        if(p3 != sum3) {
            ++sol[3];
        }

        if(p5 != sum5) {
            ++sol[5];
        }

        if(sum2 - p2 > 1) {
            ++sol[4];
        }

        if(sum2 != p2 && sum3 != p3) {
            ++sol[6];
        }
    }

    printf("%d" , sol[d]);
    return 0;
}