Cod sursa(job #1897481)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 1 martie 2017 14:32:15
Problema 12-Perm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <fstream>

using namespace std;

const int NMAX = 15000000 + 5;
const int MOD = 1048576;

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

    int N;
    cin >> N;

    if (N <= 3) {
        int fact = 1;
        for (int i = 1; i <= N; ++ i)
            fact *= i;
        cout << fact << '\n';
        return 0;
    }

    int d[4] = {0, 1, 1, 2};

    int ans = 8;
    for (int i = 4; i <= N; ++ i) {
        d[i & 3] = (d[(i + 3) & 3] + d[(i + 1) & 3] + 1) & (MOD - 1);
        ans = (ans + 2 * d[i & 3]) & (MOD - 1);
    }
    ans = (ans + 2 * MOD - 2 * d[(N - 1) & 3]) & (MOD - 1);

    cout << ans << '\n';
    return 0;
}