Cod sursa(job #1825615)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 9 decembrie 2016 15:04:06
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
# include <iostream>
# include <fstream>

using namespace std;

# define MAX_R 2500000
int p2[1 + MAX_R];
int p3[1 + MAX_R];
int p5[1 + MAX_R];

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

    int r, d, i, j, s, t2, t3, t5, d2, d3, d5;

    fin >> r >> d;

    p2[2] = 1;
    for ( i = 1; i * 2 <= MAX_R; i ++ )
        p2[i * 2] = 1 + p2[i];
    p3[3] = 1;
    for ( i = 1; i * 3 <= MAX_R; i ++ )
        p3[i * 3] = 1 + p3[i];
    p5[5] = 1;
    for ( i = 1; i * 5 <= MAX_R; i ++ )
        p5[i * 5] = 1 + p5[i];

    if ( d == 2 )
        d2 = 1, d3 = 0, d5 = 0;
    else if ( d == 3 )
        d2 = 0, d3 = 1, d5 = 0;
    else if ( d == 4 )
        d2 = 2, d3 = 0, d5 = 0;
    else if ( d == 5 )
        d2 = 0, d3 = 0, d5 = 1;
    else if ( d == 6 )
        d2 = 1, d3 = 1, d5 = 0;

    t2 = t3 = t5 = 0;
    s = 0;
    for ( i = 1; i <= ( r - 1 ) / 2; i ++ ) {
        t2 += p2[r - i + 1] - p2[i];
        t3 += p3[r - i + 1] - p3[i];
        t5 += p5[r - i + 1] - p5[i];

        s += ( t2 >= d2 && t3 >= d3 && t5 >= d5 );
    }

    if ( r % 2 == 0 ) {
        t2 += p2[r - i + 1] - p2[i];
        t3 += p3[r - i + 1] - p3[i];
        t5 += p5[r - i + 1] - p5[i];

        fout << s * 2 + ( t2 >= d2 && t3 >= d3 && t5 >= d5 );
    } else
        fout << s * 2;// + ( t2 >= d2 && t3 >= d3 && t5 >= d5 );

    fin.close();
    fout.close();

    return 0;
}