Cod sursa(job #2098609)

Utilizator robx12lnLinca Robert robx12ln Data 3 ianuarie 2018 11:27:42
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<fstream>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
int N, D, i, sol, M;
struct desc{
    int doi, trei, cinci;
    desc(){
        this->doi = 0;
        this->trei = 0;
        this->cinci = 0;
    }
} curr, ant;
inline int P( int x, int k ){
    int r = 0;
    while( x % k == 0 ){
        x /= k;
        r++;
    }
    return r;
}
inline int vf( desc A ){
    if( D == 2 && A.doi > 0 )
        return 1;
    if( D == 3 && A.trei > 0 )
        return 1;
    if( D == 4 && A.doi > 1 )
        return 1;
    if( D == 5 && A.cinci > 0 )
        return 1;
    if( D == 6 && A.doi > 0 && A.trei > 0 )
        return 1;
    return 0;
}
int main(){
    fin >> N >> D;
    M = (N - 1) / 2;
    for( i = 1; i <= M; i++ ){
        curr.doi = ant.doi + P( N - i + 1, 2 ) - P( i, 2 );
        curr.trei = ant.trei + P( N - i + 1, 3 ) - P( i, 3 );
        curr.cinci = ant.cinci + P( N - i + 1, 5 ) - P( i, 5 );
        sol += vf( curr );
        ant = curr;
    }
    sol *= 2;
    if( N % 2 == 0 ){
        i++;
        curr.doi = ant.doi + P( N - i + 1, 2 ) - P( i, 2 );
        curr.trei = ant.trei + P( N - i + 1, 3 ) - P( i, 3 );
        curr.cinci = ant.cinci + P( N - i + 1, 5 ) - P( i, 5 );
        sol += vf( curr );
    }
    fout << sol << "\n";
    return 0;
}