Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<queue>
  6. #include<string>
  7.  
  8. using namespace std;
  9.  
  10. int block[4][3][2] = {
  11. { {0,0}, {0, 1}, {1, 1} }, //ㄱ
  12. { {0,0}, {1, 0}, {1, -1} }, // ~ㄴ
  13. { {0,0}, {1, 0}, {1, 1} }, // ㄴ
  14. { {0,0}, {0, 1}, {1, 0} } //~ㄱ
  15. };
  16.  
  17. int board[20][20];
  18. int h, w;
  19.  
  20.  
  21. bool inboundary(int x, int y) {
  22. return x >= 0 && x < h&&y >= 0 && y < w;
  23. }
  24.  
  25. bool checkBlock(int i, int j, int k) {
  26. bool canCover = true;
  27. for (int c = 0; c < 3; c++) {
  28. if (!inboundary(i + block[k][c][0], j + block[k][c][1])) {
  29. canCover = false; break;
  30. }
  31. if (board[i + block[k][c][0]][j + block[k][c][1]] == 1) {
  32. canCover = false; break;
  33. }
  34. }
  35. return canCover;
  36. }
  37.  
  38. int coverBlock() {
  39. int ret = 0;
  40.  
  41. bool isAll = true;
  42.  
  43. for (int i = 0; i <h ; i++) {
  44. for (int j = 0; j < w; j++) {
  45. if (board[i][j] == 1) continue;
  46. isAll = false;
  47.  
  48. for (int k = 0; k < 4; k++) {
  49. if (!checkBlock(i, j, k)) continue;
  50.  
  51. for (int c = 0; c < 3; c++)
  52. board[i + block[k][c][0]][j + block[k][c][1]] = 1;
  53.  
  54. ret += coverBlock();
  55.  
  56. for (int c = 0; c < 3; c++)
  57. board[i + block[k][c][0]][j + block[k][c][1]] = 0;
  58.  
  59. }
  60. break;
  61. }
  62. if (!isAll) break;
  63. }
  64.  
  65. if (isAll)
  66. return 1;
  67.  
  68. return ret;
  69.  
  70. }
  71.  
  72.  
  73. void solve() {
  74. scanf("%d %d", &h, &w);
  75. int result = 0, cnt = 0;
  76.  
  77. string input;
  78. for (int i = 0; i < h; i++) {
  79. cin >> input;
  80. for (int j = 0; j < w; j++) {
  81. board[i][j] = input[j]=='#'? 1 : 0;
  82. if (board[i][j] == 0) cnt++;
  83. }
  84. }
  85.  
  86. if (cnt % 3 == 0) {
  87. result = coverBlock();
  88. }
  89.  
  90. printf("%d\n", result);
  91. }
  92.  
  93.  
  94.  
  95. int main() {
  96. int testCase;
  97. scanf("%d", &testCase);
  98.  
  99. for (int i = 0; i < testCase; i++) {
  100. solve();
  101. }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement