fork download
  1. #include <iostream>
  2.  
  3. int i, j, k, A[1004004], B[1004004], N, M;
  4.  
  5. void F(int x) {
  6. B[x] = 1;
  7. --k;
  8. if (A[x-(M+2)] == 4 && B[x-(M+2)] == 0) F(x-(M+2));
  9. if (A[x+(M+2)] == 2 && B[x+(M+2)] == 0) F(x+(M+2));
  10. if (A[x-1] == 1 && B[x-1] == 0) F(x-1);
  11. if (A[x+1] == 3 && B[x+1] == 0) F(x+1);
  12. }
  13.  
  14. int main() {
  15. std::cin >> N >> M;
  16. k = N*M;
  17.  
  18. for (i=1; i<=N; ++i)
  19. for (j=1; j<=M; ++j)
  20. std::cin >> A[i*(M+2)+j];
  21.  
  22. if ((A[M+3] == 2 || A[M+3] == 3) && B[M+3] == 0) F(M+3);
  23. if ((A[M+2+M] == 1 || A[M+2+M] == 2) && B[M+2+M] == 0) F(M+2+M);
  24. if ((A[N*(M+2)+M] == 1 || A[N*(M+2)+M] == 4) && B[N*(M+2)+M] == 0) F(N*(M+2)+M);
  25. if ((A[N*(M+2)+1] == 3 || A[N*(M+2)+1] == 4) && B[N*(M+2)+1] == 0) F(N*(M+2)+1);
  26. for (i=2; i<M; ++i)
  27. if (A[M+2+i] == 2 && B[M+2+i] == 0) F(M+2+i);
  28. for (i=2; i<M; ++i)
  29. if (A[N*(M+2)+i] == 4 && B[N*(M+2)+i] == 0) F(N*(M+2)+i);
  30. for (i=2; i<N; ++i)
  31. if (A[i*(M+2)+1] == 3 && B[i*(M+2)+1] == 0) F(i*(M+2)+1);
  32. for (i=2; i<N; ++i)
  33. if (A[i*(M+2)+M] == 1 && B[i*(M+2)+M] == 0) F(i*(M+2)+M);
  34. std::cout << k;
  35. return 0;
  36. }
Success #stdin #stdout 0.01s 5604KB
stdin
1 2
3 2
stdout
Standard output is empty