Cod sursa(job #2280953)

Utilizator skoda888Alexandru Robert skoda888 Data 11 noiembrie 2018 14:11:09
Problema Pascal Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb

#include <iostream>
#include <fstream>
#include <cmath>

int main()
{
    std::ifstream in("pascal.in");
    std::ofstream out("pascal.out");

    long long R;
    int D;
    in >> R >> D;

    int doi[R + 1] = {}, trei[R + 1] = {}, cinci[R + 1] = {};
    for(int i = 2; i <= R; ++i){
        if(D == 2 || D == 4 || D == 6){
            int p = 2;
            while(p <= i){
               doi[i] += i / p;
               p *= p;
            }
        }

        if(D == 3 || D == 6){
            int p = 3;
            while(p <= i){
               trei[i] += i / p;
               p *= p;
            }
        }

        if(D == 5){
            int p = 5;
            while(p <= i){
               cinci[i] += i / p;
               p *= p;
            }
        }
    }

    //std::cout << doi[2] << ' ' << doi[3] << ' ' << doi[4];

    int k = 0;
    for(int j = 0; j < R; ++j){

        int comb2 = std::abs(doi[R] - doi[R - j] - doi[j]);
        int comb3 = std::abs(trei[R] - trei[R - j] - trei[j]);
        int comb5 = std::abs(cinci[R] - cinci[R - j] - cinci[j]);

        if(D == 2 && comb2 > 0){
            ++k;
        }
        else if(D == 4 && comb2 > 1){
            ++k;
        }
        else if(D == 3 && comb3 > 0){
            ++k;
        }
        else if(D == 6 && comb3 > 0 && comb2 > 0){
            ++k;
        }

        else if(comb5 > 0){
            ++k;
        }
   }

    out << k;
    return 0;
}