Advertisement
a53

Polihroniade

a53
Jun 16th, 2021
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define Nmax 1002
  3. using namespace std;
  4.  
  5. int N, T, P, ans;
  6. int SL[Nmax], SC[Nmax], cnt1, cnt2;
  7. bool mat[Nmax][Nmax], ok[Nmax];
  8. vector<int> lin[2], col[2];
  9.  
  10. void Preprocess()
  11. {
  12. for (int i = 0; i < 2; ++i)
  13. lin[i].clear(), col[i].clear();
  14. for (int i = 1; i <= N; ++i)
  15. SL[i] = SC[i] = 0, ok[i] = 0;
  16.  
  17. cnt1 = cnt2 = 1;
  18. ans = 0;
  19. }
  20.  
  21. bool check()
  22. {
  23. for (int i = 1; i <= N; ++i)
  24. for (int j = 1; j <= N; ++j)
  25. if (mat[i][j])
  26. ++SL[i], ++SC[j];
  27.  
  28. for (int i = 1; i <= N; ++i)
  29. if (SL[i] != N / 2 || SC[i] != N / 2)
  30. return 0;
  31.  
  32. for (int i = 2; i <= N; ++i)
  33. {
  34. bool k = 1;
  35. for (int j = 1; j <= N; ++j)
  36. if (mat[i][j] != mat[1][j])
  37. k = 0;
  38. if (k)
  39. ++cnt1;
  40. }
  41.  
  42. for (int j = 2; j <= N; ++j)
  43. {
  44. bool k = 1;
  45. for (int i = 1; i <= N; ++i)
  46. if (mat[i][j] != mat[i][1])
  47. k = 0;
  48. if (k)
  49. ++cnt2;
  50. }
  51.  
  52. if (cnt1 != N / 2 || cnt2 != N / 2)
  53. return 0;
  54. return 1;
  55. }
  56.  
  57. void solve(vector<int> v[2], bool x)
  58. {
  59. ok[1] = 1;
  60. int cnt = 0;
  61.  
  62. for (int i = 2; i <= N; ++i)
  63. {
  64. if (x == 0)
  65. {
  66. if (mat[i][1] == mat[1][1])
  67. ok[i] = 1;
  68. else
  69. ok[i] = 0;
  70. }
  71. else
  72. {
  73. if (mat[1][i] == mat[1][1])
  74. ok[i] = 1;
  75. else
  76. ok[i] = 0;
  77. }
  78. if (ok[i] != i % 2)
  79. ++cnt;
  80. }
  81.  
  82. for (int i = 1; i <= N; ++i)
  83. {
  84. if (cnt <= N / 2)
  85. if (ok[i] != i % 2)
  86. v[ok[i]].push_back(i);
  87. if (cnt > N / 2)
  88. if ((ok[i] ^ 1) != i % 2)
  89. v[ok[i]].push_back(i);
  90. }
  91.  
  92. ans += min(cnt, N - cnt);
  93. }
  94. int main()
  95. {
  96. cin >> P >> T;
  97. while(T--)
  98. {
  99. cin >> N;
  100. Preprocess();
  101. for (int i = 1; i <= N; ++i)
  102. for (int j = 1; j <= N; ++j)
  103. {
  104. char ch;
  105. cin >> ch;
  106. mat[i][j] = ch - '0';
  107. }
  108.  
  109. if(P == 1)
  110. cout << check() << '\n';
  111. else
  112. {
  113. solve(lin, 0);
  114. solve(col, 1);
  115. cout << ans / 2 << '\n';
  116. if (P == 3)
  117. {
  118.  
  119. for(int i = 0; i < (int)lin[0].size(); ++i)
  120. cout << "L " << lin[0][i] << " " << lin[1][i] << '\n';
  121. for (int i = 0; i < (int)col[0].size(); ++i)
  122. cout << "C " << col[0][i] << " " << col[1][i] << '\n';
  123. }
  124. }
  125. }
  126.  
  127. return 0;
  128. }
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement