Cod sursa(job #2897446)

Utilizator ptlsebiptl sebi ptlsebi Data 3 mai 2022 19:50:01
Problema Jocul Flip Scor 20
Compilator c-64 Status done
Runda Arhiva de probleme Marime 2.29 kb
#include <stdio.h>
#include <stdint.h>

void read_int32_t(FILE *__restrict stream, int32_t *__restrict nr) {
  uint8_t ch;
  int8_t sgn = 1;
  *nr = 0;
  ch = fgetc(stream);
  if (ch == '-') {
    sgn = -1;
  } else if (('0' <= ch && ch <= '9')) {
    *nr = ch - '0';
  } else {
    return;
  }
  while ((ch = fgetc(stream)) && ('0' <= ch && ch <= '9')) {
    *nr *= 10;
    *nr += ch - '0';
  }
  if (ch == '\r') {
    fgetc(stream);
  }
  *nr *= sgn;
}

int32_t n, m;
int32_t a[17][17];
int32_t sc[17];
int32_t sl[17];

int main(void) {
  {
    FILE *__restrict in = fopen("flip.in", "r");
  
    read_int32_t(in, &n);
    read_int32_t(in, &m);
    {
      int32_t i, j;
      for (i = 0; i < n; ++i) {
        for (j = 0; j < m; ++j) {
          read_int32_t(in, a[i] + j);
          sl[i] += a[i][j];
          sc[j] += a[i][j];
        }
      }
    }
  
    fclose(in);
  }

  while (1) {

    /*{
      int32_t i, j;
      for (i = 0; i <= n; ++i) {
        for (j = 0; j <= m; ++j) {
          if (j == 0) {
            if (i == 0) {
              fprintf(stdout, "%2i| ", 0);
            } else {
              fprintf(stdout, "%2i| ", sl[i - 1]);
            }
          } else if (i == 0) {
            fprintf(stdout, "%2i ", sc[j - 1]);
          } else {
            fprintf(stdout, "%2i ", a[i - 1][j - 1]);
          }
        }
        fprintf(stdout, "\n");
      }
    }*/

    int32_t i;
    int32_t mi = 0;
    int32_t mii = 0;
    for(i = 0; i < n; ++i) {
      if (sc[i] < mi) {
        mi = sc[i];
        mii = i;
      }
    }
    for(i = 0; i < m; ++i) {
      if (sl[i] < mi) {
        mi = sl[i];
        mii = 16 + i;
      }
    }

    if (mi == 0) {
      //fprintf(stdout, "Breaking\n");
      break;
    }

    //fprintf(stdout, "Found mii: %u\n", mii);
    if (mii < 16) {
      sc[mii] = -sc[mii];
      for (i = 0; i < m; ++i) {
        a[i][mii] = -a[i][mii];
        sl[i] += 2 * a[i][mii];
      }
    } else {
      mii -= 16;
      sl[mii] = -sl[mii];
      for (i = 0; i < n; ++i) {
        a[mii][i] = -a[mii][i];
        sc[i] += 2 * a[mii][i];
      }
    }
  }

  {
    FILE *__restrict out = fopen("flip.out", "w");
  
    int32_t sum = 0;
    {
      int32_t i;
      for(i = 0; i < 16; ++i) {
        sum += sc[i];
      }
    }

    fprintf(out, "%i\n", sum);
  
    fclose(out);
  }

  return 0;
}