Cod sursa(job #801279)

Utilizator SchumiDumitru Andrei Georgian Schumi Data 23 octombrie 2012 20:47:49
Problema Oras Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <cassert>
#include <cstdio>

using namespace std;

const int N = 205;

int n;
int sol[N][N];

void read() {
    assert(freopen("oras.in", "r", stdin) != NULL);
    assert(freopen("oras.out", "w", stdout) != NULL);

    assert(scanf("%d", &n) == 1);
}

void sase() {
    sol[1][2] = sol[1][6] = 1;
    sol[2][3] = sol[2][5] = 1;
    sol[3][1] = sol[3][4] = sol[3][6] = 1;
    sol[4][1] = sol[4][2] = sol[4][5] = 1;
    sol[5][1] = sol[5][3] = sol[5][6] = 1;
    sol[6][2] = sol[6][4] = 1;
}

void solve() {
    sol[1][2] = sol[2][3] = sol[3][1] = 1;
    if (n % 2 == 0) {
        sase();
        for (int i = 8; i <= n; i += 2) {
            sol[i - 1][i] = 1;
            
            for (int j = 1; j <= i - 2; ++j) {
                sol[i][j] = 1;
                sol[j][i - 1] = 1;
            }
        }
    }
    else {
        for (int i = 5; i <= n; i += 2) {
            sol[i - 1][i] = 1;

            for (int j = 1; j <= i - 2; ++j) {
                sol[i][j] = 1;
                sol[j][i - 1] = 1;
            }
        }
    }
}

void print() {
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j)
            printf("%d", sol[i][j]);
        printf("\n");
    }
}

int main() {
    read();

    if (n == 4) {
        printf("-1\n");
        return 0;
    }

    solve();
    print();
}