Cod sursa(job #1610365)

Utilizator tavi2105Octavian Ungureanu tavi2105 Data 23 februarie 2016 14:34:32
Problema Oras Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <cstdio>
#define MAXN 200
char m[MAXN][MAXN];
inline void tri(int a, int b, int c){
    m[a][b]=m[b][c]=m[c][a]=1;
}
inline void make3(int a, int b, int c, int x, int y, int z){
    m[a][x]=m[c][y]=m[b][z]=1;
    m[x][b]=m[y][a]=m[z][c]=1;
    m[x][c]=m[y][b]=m[z][a]=1;
}
inline void make2(int a, int b, int c, int x, int y){
    m[a][x]=m[b][x]=m[c][x]=1;
    m[y][a]=m[y][b]=m[y][c]=1;
}
inline void make1(int a, int b, int c, int x){
    m[a][x]=m[x][b]=m[x][c]=1;
}
int main(){
    int n, i, j;
    FILE *fin, *fout;
    fin=fopen("oras.in", "r");
    fout=fopen("oras.out", "w");
    fscanf(fin, "%d", &n);
    if(n==4){
        fprintf(fout, "-1\n");
    }else{
        for(i=0; i<n/3; i++){
            tri(3*i, 3*i+1, 3*i+2);
        }
        for(i=0; i<n/3; i++){
            for(j=i+1; j<n/3; j++){
                make3(3*i, 3*i+1, 3*i+2, 3*j, 3*j+1, 3*j+2);
            }
        }
        if(n%3==2){
            m[n-2][n-1]=1;
            for(i=0; i<n/3; i++){
                make2(3*i, 3*i+1, 3*i+2, n-2, n-1);
            }
        }else if(n%3==1){
            m[n-1][0]=m[1][n-1]=m[2][n-1]=1;
            for(i=1; i<n/3; i++){
                make1(3*i, 3*i+1, 3*i+2, n-1);
            }
        }
        for(i=0; i<n; i++){
            for(j=0; j<n; j++){
                fputc(m[i][j]+'0', fout);
            }
            fputc('\n', fout);
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}