Cod sursa(job #1752471)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 4 septembrie 2016 00:40:43
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;

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

const int EXP = 1e0 + 3;
const int INF = 1e9 + 7;
const int DIM = 5e6 + 5;

const int c[EXP] = {2, 3, 5};

int v[EXP], d[EXP][DIM], n, p, ans;

int main( int argc, const char *argv[] ) {

    in >> n >> p;

    for( int k = 0; k <= 2; k ++ ) {
    for( int i = 1; i <= n; i ++ ) {
        if( i % c[k] == 0 )
            d[k][i] = d[k][i / c[k]] + 1;
    }}

    for( int i = 1, j = 2; i < n && j <= ((n + 2) >> 1); i ++, j ++ ) {
        for( int k = 0; k <= 2; k ++ )
            v[k] += d[k][n-i+1] - d[k][i];

        switch( p ) {
            case 2: { if( v[0] >= 1              ) ans ++; break; }
            case 3: { if( v[1] >= 1              ) ans ++; break; }
            case 4: { if( v[0] >= 2              ) ans ++; break; }
            case 5: { if( v[2] >= 1              ) ans ++; break; }
            case 6: { if( v[0] >= 1 && v[1] >= 1 ) ans ++; break; }
        }

        if( j == ((n + 1) >> 1) )
            ans <<= 1;
    }

    out << ans << endl;
    return 0;
}