Cod sursa(job #67578)

Utilizator vlad_popaVlad Popa vlad_popa Data 25 iunie 2007 12:03:46
Problema P-sir Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda Finala, Clasele 11-12 Marime 1.26 kb
#include <cstdio>

#define FIN "psir.in"
#define FOUT "psir.out"
#define NMAX 1<<10

int s[NMAX][NMAX], N, P[NMAX];

void read ()
{
    scanf ("%d\n", &N);

    for (int i = 1; i <= N; ++ i)
        scanf ("%d ", P + i);

    for (int i = 1; i <= N; ++ i)
        s[1][i] = 1;
    for (int i = 2; i <= N; ++ i)
        s[2][i] = i - 1;
}

void solve ()
{
    int cnt;

    for (int l = 3; l <= N; ++ l)
        for (int i = l; i <= N; ++ i)
        {
            cnt = 0;
            for (int j = i - 1; j >= 1; -- j)
            {
                if (P[j] > P[i])
                    ++ cnt;
                else if (P[j] < P[i])
                    s[l][i] += cnt * s[l-2][j];
            }

            cnt = 0;
            for (int j = i - 1; j >= 1; -- j)
            {
                if (P[j] < P[i])
                    ++ cnt;
                else if (P[j] > P[i])
                    s[l][i] += cnt * s[l-2][j];
            }
        }

    int sol = 0;

    for (int l = 2; l <= N; ++ l)
        for (int i = 2; i <= N; ++ i)
            sol += s[l][i];

    printf ("%d\n", sol);
}

int
 main ()
{
    freopen (FIN, "rt", stdin);
    freopen (FOUT, "wt", stdout);

    read ();
    solve ();

    return 0;
}