Facebook
From Stained Matamata, 1 Year ago, written in C++.
This paste is a reply to Question 1 from Crimson Cat - view diff
Embed
Download Paste or View Raw
Hits: 142
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4. using vvi = vector<vector<int>>;
  5. int solve(vector<vector<int>>& b) {
  6.         int N = b.size(), rowSum = 0, colSum = 0, rowSwap = 0, colSwap = 0;
  7.         for (int i = 0; i < N; ++i) {
  8.                 for (int j = 0; j < N; ++j) {
  9.                         if (b[0][0]^b[i][0]^b[0][j]^b[i][j]) {
  10.                                 return -1;
  11.                         }
  12.                 }
  13.         }
  14.         for (int i = 0; i < N; ++i) {
  15.                 rowSum += b[0][i];
  16.                 colSum += b[i][0];
  17.                 rowSwap += b[i][0] == i % 2;
  18.                 colSwap += b[0][i] == i % 2;
  19.         }
  20.  
  21.         if (rowSum != N / 2 && rowSum != (N + 1) / 2) return -1;
  22.         if (colSum != N / 2 && colSum != (N + 1) / 2) return -1;
  23.  
  24.         if (N % 2) {
  25.                 if (colSwap % 2) colSwap = N - colSwap;
  26.                 if (rowSwap % 2) rowSwap = N - rowSwap;
  27.         }
  28.         else {
  29.                 colSwap = min(N - colSwap, colSwap);
  30.                 rowSwap = min(N - rowSwap, rowSwap);
  31.         }
  32.         return (colSwap + rowSwap) / 2;
  33. }
  34.  
  35. int main() {
  36.         ll n, m;
  37.         cin >> n >> m;
  38.         vvi v(n, vector<int>(m));
  39.         for (int i = 0; i < n; i++) {
  40.                 for (int j = 0; j < m; j++) {
  41.                         cin >> v[i][j];
  42.                 }
  43.         }
  44.         cout << solve(v);
  45. }