Cod sursa(job #2694122)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 8 ianuarie 2021 09:29:21
Problema Pascal Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("pascal.in");
ofstream fout("pascal.out");

int r, d;
int cnt[2][5000005];


void precalc(int *v, int x, int n){
    for (int i = x; i <= n; i *= x){
        for (int j = i; j <= n; j += i){
            v[j]++;
        }
    }
    for (int i = 1; i <= n; ++i){
        v[i] += v[i - 1];
    }
}

int main(){
    fin >> r >> d;
    if (d == 2 || d == 4){
        precalc(cnt[0], 2, r);
    }
    else if (d == 3 || d == 5){
        precalc(cnt[0], d, r);
    }
    else{
        precalc(cnt[0], 2, r);
        precalc(cnt[1], 3, r);
    }
    int ans = 0;
    for (int i = 0; i <= r; ++i){
        int sum1 = cnt[0][r] - cnt[0][i] - cnt[0][r - i];
        int sum2 = cnt[1][r] - cnt[1][i] - cnt[1][r - i];
        if (d == 2 || d == 3 || d == 5){
            if (sum1 > 0) ++ans;
        }
        else if (d == 4){
            if (sum1 > 1) ++ans;
        }
        else{
            if (sum1 > 0 && sum2 > 0) ++ans;
        }
    }
    fout << ans;
    fin.close();
    fout.close();
    return 0;
}