Cod sursa(job #2738723)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 6 aprilie 2021 11:52:01
Problema Permutari2 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

#define MOD 10007
using namespace std;

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

const int NMAX(305);
typedef long long ll;
ll dp[NMAX], fact[305], rez[305], aux[305];
int n, k;

void inm(ll a[305], ll b[305], ll c[305]){
    memset(aux, 0, sizeof(aux));
    for(int i = 0; i <= n; ++i)
        for(int j = 0; j <= i; ++j)
            aux[i] += (b[j] * c[i - j]) % MOD;
    for(int i = 0; i <= n; ++i)
        a[i] = aux[i];
}

void xPow(int k){
    rez[0] = 1;
    while(k){
        if(k & 1)
            inm(rez, dp, rez);
        inm(dp, dp, dp);
        k >>= 1;
    }
}

int main()
{
    fact[0] = 1;
    for(int i = 1; i <= 300; ++i)
        fact[i] = fact[i - 1] * i % MOD;

    fin >> n >> k;

    for(int i = 1; i <= n; ++i){
        dp[i] = fact[i];
        for(int j = i - 1; j >= 1; --j)
            dp[i] = (dp[i] - (dp[j] * fact[i - j]) % MOD + MOD) % MOD;
    }

    xPow(k);

    fout << rez[n] << '\n';
    return 0;
}