Cod sursa(job #1980071)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 12 mai 2017 09:21:48
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <bits/stdc++.h>
const int DIR = 4;
const int MAXN = 500;
using namespace std;
int lin [DIR + 1] = {0, 0, -1, 0, 1};
int col [DIR + 1] = {0, 1, 0, -1, 0};
char a[MAXN + 1][MAXN + 1];
int val[MAXN + 1][MAXN + 1];
char fab[MAXN + 1][MAXN + 1];
char viz[MAXN + 1][MAXN + 1];
int main()
{
    FILE *fin, *fout;
    int p, n, m, i, j, x, y, nr, ii, jj, cate, iii, jjj, fav, s, max;
    fin = fopen ("arrows.in", "r");
    fout = fopen ("arrows.out", "w");
    fscanf (fin, "%d%d%d", &p, &n, &m);
    for (i = 1; i <= n; i++)
      for (j = 1; j <= m; j++)
        fscanf (fin, "%d", &a[i][j]);
    fscanf (fin, "%d%d", &x, &y);
    for (i = 0; i <= n + 1; i++)
        viz[i][m + 1] = viz[i][0] = 1;
    for (i = 0; i <= m + 1; i++)
        viz[n + 1][i] = viz[0][i] = 1;
    for (i = 1; i <= n; i++)
      for (j = 1; j <= m; j++)
        if (val[i][j] == 0) {
            ii = i;
            jj = j;
            cate = 0;
            while (viz[ii][jj] == 0) {
                nr = a[ii][jj];
                viz[ii][jj] = 1;
                ii = ii + lin[nr];
                jj = jj + col[nr];
                cate++;
            }
            if (ii > 0 && ii <= n && jj > 0 && jj <= m)
                fav = 1000;
            else
                fav = 1;
            iii = ii;
            jjj = jj;
            ii = i;
            jj = j;
            while ( ii != iii || jj != jjj) {
                nr = a[ii][jj];
                val[i][j] = cate * fav;
                fab[i][j] = fav / 1000;
                ii = ii + lin[nr];
                jj = jj + col[nr];
                cate--;
            }
        }
    if (p == 1) {
      fprintf (fout, "%d", val[x][y]);
    }
    else if (p == 2) {
      s = 0;
      for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++)
          s = s + fab[i][j];
      fprintf (fout, "%d", s);
    }
    else {
      max = 0;
      for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++)
          if (val[i][j] > max)
            max = val[i][j];
      fprintf (fout, "%d", max);
    }
    fclose (fin);
    fclose (fout);
    return 0;
}