Cod sursa(job #829234)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 4 decembrie 2012 22:45:23
Problema Sortari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctype.h>
#include <cstring>
#include <ctime>
#include <cassert>

using namespace std;

#define MAXN 1001
#define MOD 999017

int N;
int nrEgale[MAXN];

int main() {
	freopen("sortari2.in", "r", stdin);
	freopen("sortari2.out","w", stdout);

    scanf("%d", &N);

    nrEgale[0] = nrEgale[1] = 1;
    for(int i = 2; i <= N; i++) {
        // 1 si 2 la inceput
        nrEgale[i] = 2 * nrEgale[i - 1];

        for(int j = 3; j <= i; j++) {
            // j la inceput
            // j 1 2 3 ... j-2 ...
            nrEgale[i] += nrEgale[i - (j - 1)];
            if(nrEgale[i] >= MOD)
                nrEgale[i] -= MOD;
        }
    }

    int nrTotal = 1;
    for(int i = 2; i <= N; i++)
        nrTotal = (nrTotal * i) % MOD;

    int ans = (nrTotal - nrEgale[N] + MOD) % MOD;
    printf("%d\n", ans);

	return 0;
}