Cod sursa(job #1560335)

Utilizator akaprosAna Kapros akapros Data 2 ianuarie 2016 16:15:00
Problema Oras Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <bits/stdc++.h>
#define pb push_back
#define maxN 202
using namespace std;
int n, a[maxN][maxN];
vector < int > V[maxN];
void read()
{
    freopen("oras.in", "r", stdin);
    scanf("%d", &n);
}
void solve()
{
    int i, j, k;
    if (n == 4)
        return;
    /*
    010
    001
    100*/
    a[1][2] = a[2][3] = a[3][1] = 1;
    V[1].pb(2); V[2].pb(3); V[3].pb(1);
    for (i = 5; i <= n; ++ i)
    {
        if (i == 6)
        {
            a[1][2] = a[1][4] = a[2][5] = 1;
            a[5][4] = a[6][1] = a[6][5] = 1;
            a[2][6] = a[3][1] = a[3][2] = 1;
            a[4][6] = a[5][1] = a[5][3] = 1;
            a[3][6] = a[4][2] = a[4][3] = 1;
            V[1].pb(2); V[1].pb(4);
            V[2].pb(5); V[2].pb(6);
            V[3].pb(2); V[3].pb(6);
            V[4].pb(6); V[4].pb(3); V[4].pb(2);
            V[5].pb(4); V[5].pb(3); V[5].pb(1);
            V[6].pb(1); V[6].pb(5);
            continue;
        }
        else
        {
            for (j = 1; j <= i - 2; ++ j)
                if (!a[i - 1][j] && !a[j][i - 1])
                    for (k = 0; k < V[j].size(); ++ k)
                    {
                        V[i - 1].pb(j);
                        a[i - 1][j] = 1;
                        V[V[j][k]].pb(i - 1);
                        a[V[j][k]][i - 1] = 1;
                    }
            a[i][i - 1] = 1;
            V[i].pb(i - 1);
            for (j = 1; j <= i - 2; ++ j)
                if (a[i - 1][j])
                {
                    V[j].pb(i);
                    a[j][i] = 1;
                }
                else
                {
                    V[i].pb(j);
                    a[i][j] = 1;
                }
        }
    }
}
void write()
{
    int i, j;
    freopen("oras.out", "w", stdout);
    if (n == 4)
        printf("-1");
    else
        for (i = 1; i <= n; ++ i)
        {
            for (j = 1; j <= n; ++ j)
                printf("%d", a[i][j]);
            printf("\n");
        }
}
int main()
{
    read();
    solve();
    write();
    return 0;
}