Cod sursa(job #2028853)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 28 septembrie 2017 19:12:10
Problema Sortari2 Scor 100
Compilator cpp Status done
Runda Simulare 30 Marime 0.88 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

// metoda 1 : nr inversiuni
// metoda 2 : suma (lg - 1) pt fiecare ciclu

typedef long long i64;
const int mod = 999017;
const int nmax = 1000;

i64 sol[nmax + 1]; // nr permutari de lg i cu m1 = m2
i64 c[nmax + 1]; // nr de ciclii de lg i cu i - 1 inversiuni

int main() {
    int n;
    fin >> n;

    c[ 1 ] = 1;
    c[ 2 ] = 1;
    for (int i = 3; i <= n; ++ i) {
        c[ i ] = c[i - 1] * 2 % mod;
    }

    sol[ 0 ] = 1;
    for (int i = 1; i <= n; ++ i) {
        for (int j = 1; j <= i; ++ j) {
            sol[ i ] += sol[i - j] * c[ j ];
            sol[ i ] %= mod;
        }
    }

    i64 aux = 1;
    for (int i = 1; i <= n; ++ i)
        aux = aux * i % mod;

    fout << (aux + mod - sol[ n ]) % mod << "\n";

    fin.close();
    fout.close();
    return 0;
}