Cod sursa(job #1591653)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 6 februarie 2016 15:32:43
Problema Permutari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>

const int MAX_N = 300;
const int MOD = 10007;

using namespace std;

unsigned D[MAX_N + 1][MAX_N + 1];

int main() {
    ifstream in("permutari2.in");
    int N, K; in >> N >> K;
    in.close();
    unsigned fact = 1;

    D[1][1] = 1;
    for (int i = 2; i <= N; i++) {
        fact = (fact * i) % MOD;
        D[1][i] = fact;
        for (int j = 2; j <= i; j++) {
            unsigned long long q = 0LL;
            unsigned *ptr1 = D[j - 1] + j - 1;
            unsigned *ptr2 = D[1] + i - j + 1;
            for (int x = j - 1; x < i; x++) {
                // q += D[j - 1][x] * D[1][i - x];
                q += *ptr1 * *ptr2;
                ptr1++; ptr2--;
            }
            D[j][i] = q - q / MOD * MOD;
            D[1][i] += MOD - D[j][i];
            D[1][i] -= MOD & -(D[1][i] >= MOD);
        }
    }

    ofstream out("permutari2.out");
    out << D[K][N] << '\n';
    out.close();
    return 0;
}