Cod sursa(job #231768)

Utilizator marius.pungaruMarius Pungaru marius.pungaru Data 14 decembrie 2008 12:54:42
Problema Tablete Scor 90
Compilator c Status done
Runda Algoritmiada 2009, Runda 1, Clasele 5-8 Marime 2.72 kb
#include <stdio.h>

// Not so smart source code.
// A lot of useless cases.
// But I have code it fast :)
int main(void) {
  unsigned int lines, even_column, last_line, i, j, n = 1;

  freopen("tablete.in", "r", stdin);
  freopen("tablete.out", "w", stdout);

  scanf("%u%u", &lines, &even_column);
  if (!(lines % 2)) {
    if (!(even_column % 2)) {
      for (i = 1; i <= lines; ++i) {
        for (j = 1; j <= lines; ++j, ++n)
          printf("%u ", n);
        printf("\n");
      }
    } else {
      last_line = (lines % 2) ? (lines - 3) : lines;

      for (i = 1; i <= last_line; i += 2) {
        n = (i - 1) * lines + 1;
        for (j = 1; j <= lines; ++j, ++n)
          if (j != even_column)
            printf("%u ", n);
        printf("%u\n", n + even_column - 1);
        printf("%u ", n - lines + even_column - 1);
        for (j = 1; j <= lines; ++j, ++n)
          if (j != even_column)
            printf("%u ", n);
        printf("\n");
      }

      if (last_line != lines) {
        for (j = 0; j < 2; ++j) {
          for (i = 1; i <= lines; ++i, ++n)
            if (i != even_column)
              printf("%u ", n);
          printf("%u\n", n + even_column - 1);
        }
        printf("%u ", n - 1 + even_column - 2 * lines);
        for (i = 1; i <= lines; ++i, ++n)
          if (i != even_column)
            printf("%u ", n);
      }
    }
  } else {
    last_line = (lines % 2) ? (lines - 3) : lines;

    for (i = 1; i <= last_line; i += 2) {
      n = (i - 1) * lines + 1;
      if (!((n + even_column - 1) % 2)) {
        for (j = 1; j < lines; j++, n++)
          printf("%u ", n);
        printf("%u\n", n + lines);
        printf("%u ", n++);
        for (j = 1; j < lines; j++, n++)
          printf("%u ", n);
        printf("\n");
      } else {
        n++;
        for (j = 1; j <= lines; j++, n++)
          printf("%u ", n);
        printf("\n%u ", n - lines - 1);
        for (j = 1; j < lines; j++, n++)
          printf("%u ", n);
        printf("\n");
      }
    }

    if (last_line != lines) {
      n = (last_line) * lines + 1;
      if (!((n + even_column - 1) % 2)) {
        for (i = 1; i < lines; i++, n++)
          printf("%u ", n);
        printf("%u\n", n + 1);
        printf("%u ", n);
        n += 2;
        for (i = 2; i <= lines; i++, n++)
          printf("%u ", n);
        printf("\n");
        for (i = 1; i <= lines; i++, n++)
          printf("%u ", n);
      } else {
        n++;
        for (i = 1; i < lines; i++, n++)
          printf("%u ", n);
        printf("%u\n", n + 2 * lines - 1);
        for (i = 1; i <= lines; i++, n++)
          printf("%u ", n);
        printf("\n%u ", n - 2 * lines);
        for (i = 1; i < lines; i++, n++)
          printf("%u ", n);
      }
    }
  }

  return 0;
}