Cod sursa(job #119843)

Utilizator cupacatenumaratecupacatenumarate cupacatenumarate Data 3 ianuarie 2008 14:55:18
Problema Tije Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <stdio.h>

int St[111][111], N, Lev[111], X[111];

int main()
{
        int i, j;

        freopen("tije.in", "r", stdin);
        freopen("tije.out", "w", stdout);

        scanf("%d", &N);

        for (i = 1; i <= N; i++)
            for (j = 1; j <= N; j++) St[i][j] = i, Lev[i] = N;

        //first set
        for (i = 1; i <= N; i++)
        {
                Lev[i]--;
                St[N+1][++Lev[N+1]] = i;
                printf("%d %d\n", i, N+1);
        }
        for (i = 2; i <= N; i++)
        {
                St[i][++Lev[i]] = 1;
                Lev[1]--;
                printf("1 %d\n", i);
        }

        while (Lev[N+1]>0)
        {
                printf("%d 1\n", N+1);
                St[1][++Lev[1]] = St[N+1][Lev[N+1]];
                St[N+1][Lev[N+1]--] = 0;
        }

        for (i = 2; i <= N; i++)
        {
                for (j = N; j >= i; j--)
                {
                    while (St[j][Lev[j]]!=j)
                    {
                        St[j+1][++Lev[j+1]] = St[j][Lev[j]];
                        St[j][Lev[j]--] = 0;
                        printf("%d %d\n", j, j+1);
                    }
                    printf("%d %d\n", j, N+1);
                    St[j][Lev[j]--] = 0;
                    St[N+1][++Lev[N+1]] = j;
                }
                for (j = i+1; j <= N; j++)
                {
                        St[i][Lev[i]--] = 0;
                        St[j][++Lev[j]] = i;
                        printf("%d %d\n", i, j);
                }
                while (Lev[N+1]>0)
                {
                        printf("%d %d\n", N+1, i);
                        St[i][++Lev[i]] = St[N+1][Lev[N+1]];
                        St[N+1][Lev[N+1]--] = 0;
                }
                j = 0;
        }

        for (i = 1; i <= N; i++)
        {
            for (j = 1; j <= N; j++) X[j] = 0;
            for (j = 1; j <= N; j++)
                X[ St[i][j] ] = 1;
            for (j = 1; j <= N; j++)
                if (!X[j]) { printf("Not Good\n"); return 0; }
        }

        return 0;
        
}