Cod sursa(job #941064)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 17 aprilie 2013 20:45:05
Problema 12-Perm Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
using namespace std;
ifstream f("12perm.in");
ofstream g("12perm.out");
#define MOD(X) (X^((X>>20)<<20))
int dp[2][6][6],n;

int main()
{
    dp[0][1][2]=1;
    dp[0][2][1]=1;
    dp[0][0][1]=1;
    dp[0][0][2]=1;
    int l=0;
    int result=0;
    f>>n;

    if (n==1) g<<1<<'\n';
    else if (n==2) g<<2<<'\n';
    else if (n==3) g<<6<<'\n';
    else
    {

        for(int i=4; i<=n; ++i)
        {
            result+=dp[l][1][2];
            result=MOD(result);

            dp[l^1][0][1]+=dp[l][1][2];
            dp[l^1][2][1]+=dp[l][2][1];
            dp[l^1][1][2]+=dp[l][2][1];
            dp[l^1][2][1]+=dp[l][0][1];
            dp[l^1][0][1]+=dp[l][0][2];

            for(int j=0; j<3; ++j)
                for(int t=0; t<3; ++t)
                    dp[l^1][j][t]=MOD(dp[l^1][j][t]);

            l^=1;
        }

        for(int j=0; j<3; ++j)
            for(int t=0; t<3; ++t)
                result+=dp[l][j][t];

        result=MOD(result*2);
        g<<result<<'\n';
    }



    f.close();
    g.close();
    return 0;
}