Cod sursa(job #984520)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 14 august 2013 18:05:00
Problema 12-Perm Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <list>

using namespace std;

const int mask = ( 1 << 20 ) - 1;

int N;

list <int> T;

/// T[1] = 1, T[2] = 2, T[3] = 6, T[4] = 12;
/// T[i] = T[i - 1] + T[i - 3] + 2 * (i - 2)

int main()
{
    ifstream f("12perm.in");
    ofstream g("12perm.out");

    f >> N;

    switch( N )
    {
        case 1: T.push_back( 1 );   break;
        case 2: T.push_back( 2 );   break;
        case 3: T.push_back( 6 );   break;
        case 4: T.push_back( 12 );  break;

        default:

            T.push_back( 2 );
            T.push_back( 6 );
            T.push_back( 12 );

            for ( int i = 5; i <= N; ++i )
            {
                T.push_back( ( T.back() + T.front() + 2 * ( i - 2 ) ) & mask );
                T.pop_front();
            }

            break;
    }

    g << T.back() << "\n";

    f.close();
    g.close();

    return 0;
}