Cod sursa(job #1496862)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 5 octombrie 2015 18:09:45
Problema Sortari2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <fstream>
//#include <algorithm>

using namespace std;

const int mod = 999017;

/*int n;
int v[105];

inline int invs () {
    int ans = 0;
    for (int i = 1; i <= n; ++ i)
        for (int j = i + 1; j <= n; ++ j)
            ans += (v[i] > v[j]);

    return ans;
}

bool viz[105];
inline int ciclii () {
    for (int i = 1; i <= n; ++ i)
        viz[i] = false;

    int ans = 0, j;
    for (int i = 1; i <= n; ++ i)
        if (!viz[i]) {
            ++ ans;

            j = i;
            while (!viz[j]) {
                viz[j] = true;
                j = v[j];
            }
        }

    return ans;
}

int det (int x) {
    n = x;

    for (int i = 1; i <= n; ++ i)
        v[i] = i;

    int ans = 0;
    do {
        if (invs() == n - ciclii())
            ++ ans;
    } while (next_permutation(v + 1, v + n + 1));

    return ans;
}*/

int ans[1005];

int main()
{
    ifstream cin("sortari2.in");
    ofstream cout("sortari2.out");

    //for (int i = 1; i <= 12; ++ i)
    //    cout << i << ' ' << det(i) << endl;

    int n = 0;
    cin >> n;

    ans[1] = 1;
    ans[2] = 2;

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

        fact = (fact * i) % mod;
    }

    cout << (fact + mod - ans[n]) % mod << '\n';

    cin.close();
    cout.close();
    return 0;
}