Cod sursa(job #927911)

Utilizator eddy13579Eduard Stoica eddy13579 Data 26 martie 2013 09:35:19
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
 
using namespace std;
 
int R, D;
int d0, d1, d2;
int total; // 2, 3 sau 5 (ca divizori primi)
char p0[5000002], p1[5000002], p2[5000002];
 
int main()
{
    ifstream fin("pascal.in");
    ofstream fout("pascal.out");
 
    fin >> R >> D;
 
    for (int i = 1; i <= 5000000; ++i)
    {
        if (i % 2 == 0)
        {
            p0[i] = p0[i / 2] + 1;
            p1[i] = p1[i / 2];
            p2[i] = p2[i / 2];
        }
        else if (i % 3 == 0)
        {
            p0[i] = p0[i / 3];
            p1[i] = p1[i / 3] + 1;
            p2[i] = p2[i / 3];
        }
        else if (i % 5 == 0)
        {
            p0[i] = p0[i / 5];
            p1[i] = p1[i / 5];
            p2[i] = p2[i / 5] + 1;
        }
    }
 
    for (int i = 1; i < R; ++i)
    {
        // R! / i! * (R - i)!
 
        d0 += p0[R - i + 1] - p0[i];
        d1 += p1[R - i + 1] - p1[i];
        d2 += p2[R - i + 1] - p2[i];
 
        if (D == 2 && d0) ++total;
        if (D == 3 && d1) ++total;
        if (D == 4 && d0 >= 2) ++total;
        if (D == 5 && d2) ++total;
        if (D == 6 && d0 && d1) ++total;
    }
 
    fout << total;
 
    fin.close();
    fout.close();
}