Cod sursa(job #751283)

Utilizator PetcuIoanPetcu Ioan Vlad PetcuIoan Data 25 mai 2012 11:31:11
Problema Oras Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<stdio.h>
#include<assert.h>

#include<vector>
#include<algorithm>

using namespace std;

int verts, lolno, graph[222][222];
vector<int> lulz;

void read(){
  assert(freopen("oras.in", "r", stdin));

  scanf("%d", &verts);

  for(int i = 1; i <= verts; ++i)
    lulz.push_back(i);
}

void solve(vector<int> m){
  if(m.size() == 1)
    return;

  if(m.size() == 2){
    lolno = 1;
    return;
  }

  vector<int> one, two;
  int good = m.back();
  m.pop_back();

  for(int i = 0; i < m.size() / 2; ++i){
    one.push_back(m[i]);
    graph[good][m[i]] = 1;
  }

  for(int i = m.size() / 2; i < m.size(); ++i){
    two.push_back(m[i]);
    graph[m[i]][good] = 1;
  }

  for(int i = 0; i < one.size(); ++i)
    for(int j = 0; j < two.size(); ++j)
      graph[one[i]][two[j]] = 1;

  solve(one);
  solve(two);
}

void write(){
  assert(freopen("oras.out", "w", stdout));

  if(lolno)
    printf("-1");
  else
    for(int i = 1; i <= verts; ++i){
      for(int j = 1; j <= verts; ++j)
        printf("%d", graph[i][j]);

      printf("\n");
    }

}

int main(){
  read();
  solve(lulz);
  write();
  return 0;
}