Cod sursa(job #2404546)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 12 aprilie 2019 23:43:35
Problema Oras Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.74 kb
/*
        The idea is that you can build any graph from 2 basic
    graphs by adding two nodes x and y with x -> y and for every node
    i from the existing graph the edges i -> x and y -> i . In this way
    you are making cycles with 3 edges and the restriction is respected.
        The initial graphs have 3 and 6 nodes.  ( for odd and even )
*/
#include <bits/stdc++.h>
using namespace std ;
ifstream in ("oras.in") ;
ofstream out ("oras.out") ;
int n , dp [ 205 ][ 205 ] ;
int main () {
    int i , q , j ;
    in >> n ;
    if ( n == 4 )   return out << "-1" , 0 ;
    if ( n & 1 )    {
        dp [ 1 ][ 2 ] = 1 ;
        dp [ 2 ][ 3 ] = 1 ;
        dp [ 3 ][ 1 ] = 1 ;
            for ( q = 3 ; q < n ; q += 2 )  {
                for ( i = 1 ; i <= q ; ++ i )
                    dp [ q + 1 ][ i ] = 1 ,
                    dp [ i ][ q + 2 ] = 1 ;
            dp [ q + 2 ][ q + 1 ] = 1 ;
            }
        for ( i = 1 ; i <= n ; ++ i , out << '\n' )
        for ( j = 1 ; j <= n ; ++ j )   out << dp [ i ][ j ] ;
    }
    dp [ 1 ][ 2 ] = 1 ;
    dp [ 2 ][ 3 ] = 1 ;
    dp [ 3 ][ 1 ] = 1 ;
    dp [ 4 ][ 3 ] = 1 ;
    dp [ 3 ][ 5 ] = 1 ;
    dp [ 5 ][ 4 ] = 1 ;
    dp [ 6 ][ 4 ] = 1 ;
    dp [ 5 ][ 6 ] = 1 ;
    dp [ 3 ][ 6 ] = 1 ;
    dp [ 6 ][ 2 ] = 1 ;
    dp [ 1 ][ 6 ] = 1 ;
    dp [ 1 ][ 5 ] = 1 ;
    dp [ 2 ][ 5 ] = 1 ;
    dp [ 4 ][ 1 ] = 1 ;
    dp [ 4 ][ 2 ] = 1 ;
    for ( q = 6 ; q < n ; q += 2 )  {
                for ( i = 1 ; i <= q ; ++ i )
                    dp [ q + 1 ][ i ] = 1 ,
                    dp [ i ][ q + 2 ] = 1 ;
            dp [ q + 2 ][ q + 1 ] = 1 ;
            }
    for ( i = 1 ; i <= n ; ++ i , out << '\n' )
    for ( j = 1 ; j <= n ; ++ j )   out << dp [ i ][ j ] ;
}