Cod sursă (job #784276)

Utilizator avatar avram.popa Avram-Popa avram.popa IP ascuns
Problemă Virus2 Compilator c-32 | 1,75 kb
Rundă Arhiva de probleme Status evaluat
Dată 21 aug. 2024 23:02:27 Scor 30
#include <stdio.h>

#define MAXN 2000
typedef struct {
    int l, c;
} point;
char mat[MAXN + 2][MAXN + 2];
point q[MAXN * MAXN];
int dl[]= {0,0,-1,1};
int dc[]= {-1,1,0,0};
void bord(int r1, int c1, int r2, int c2) {
    for (int i = r1; i <= r2; i++) {
        mat[i][c1] = mat[i][c2] = 1;
    }
    for (int i = c1 + 1; i < c2; i++) {
        mat[r1][i] = mat[r2][i] = 1;
    }
}
/*void lee(int l, int c, int m1, int m2) {
  int cs,cd,lin,col,auxl,auxc;
  q[0].l=l;
  q[0].c=c;
  mat[l][c] = m2;
  cs=0;
  cd=1;
  while (cs<cd) {
    lin = q[cs].l;
    col = q[cs].c;
    cs++;
    for (int d=0;d<4; d++) {
      int auxl = lin + dir[d].l, auxc = col + dir[d].c;
      if (mat[auxl][auxc]==m1) {
        mat[auxl][auxc] = m2;
        q[cd].l=auxl;
        q[cd].c=auxc;
        cd++;
      }
    }
  }
}*/
void fill(int l,int c,int m1,int m2) {
    if(mat[l][c]==m1) {
        mat[l][c]=m2;
        for(int i=0; i<4; i++) {
            fill(l+dl[i],c+dc[i],m1,m2);
        }
    }
}
int test(int l1, int c1, int l2, int c2) {
    if ((mat[l1][c1]==1)||(mat[l2][c2]==1)) {
        return 0;
    }
    fill(l1, c1, 0, 2);
    char result = (mat[l2][c2] == 2);
    fill(l1, c1, 2, 0);
    return result;
}
int main() {
    FILE *fin,*fout;
    int n, q,type, l1, c1, l2, c2;
    fin = fopen("virus2.in", "r");
    fout = fopen("virus2.out", "w");
    fscanf(fin, "%d %d", &n, &q);
    bord(0,0,n+1,n+1);
    for (int i=0; i<q; i++) {
        fscanf(fin, "%d %d %d %d %d", &type, &l1, &c1, &l2, &c2);
        if (type == 1) {
            bord(l1, c1, l2, c2);
        } else {
            fprintf(fout,test(l1, c1, l2, c2)==1 ? "DA\n" : "NU\n");
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}