Cod sursa(job #1429896)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 7 mai 2015 15:09:04
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
#define DIM 5000010
using namespace std;

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

int N, D1[DIM], D2[DIM], S, i, nr, val, j;
int A[2000][2000];

inline void Divide(int D[], int st, int dr, int S){
    int K = dr - st + 1;
    if(K == 1){
        D[st] = 1;
        D[dr] = 1;
        return;
    }
    int val = 1;
    while(val * S < K)
        val *= S;
    int aux = val;
    val = K - val;
    Divide(D, st, st+val-1, S);
    Divide(D, dr-val+1, dr, S);
    if(S == 4 && K >= 5)
        Divide(D, st + aux / 2 - 1, st + aux / 2 - 1 + val - 1, S);
    return;
}

inline void CodeExpert(){
    fin >> N >> S; N ++;
    if(S == 6){
        Divide(D1, 1, N, 2);
        Divide(D2, 1, N, 3);
        for(i = 1; i <= N; i ++)
            if(!D1[i] && !D2[i])
                nr ++;
        fout << nr;
    }
    else{
        Divide(D1, 1, N, S);
        for(i = 1; i <= N; i ++)
            if(!D1[i])
                nr ++;
       fout << nr;
    }
    return;
}

inline void Test(){
    fin >> N;
    A[1][1] = 1; fout << "1\n";
    for(i = 2; i <= N; i ++){
        for(j = 1; j <= i; j ++){
            A[i][j] = (A[i-1][j-1] + A[i-1][j]) % 4;
            fout << !(A[i][j] == 0) << "";
        }
        fout << "\n";
    }
    return;
}

int main(){
    //Test();
    CodeExpert();
    return 0;
}