Facebook
From Stained Matamata, 2 Years ago, written in C++.
This paste is a reply to Question 1 from Crimson Cat - go back
Embed
Viewing differences between Question 1 and Question 2
#include
using namespace std;

std;
using ll = long long;
using vvi = vector>;
int triplets(vectorarr) solve(vector>& b) {
        map k;
        map, int> mpp;
        vector> ssd;
        
int count N = b.size(), rowSum = 0, colSum = 0, rowSwap = 0, colSwap = 0;
        sort(arr.begin(), arr.end());
        int 
for (int i = 0;
        while (i 
0; i arr.size()) N; ++i) {
                if (k.find(arr[i]) == k.end()) {
                        k[arr[i]] = 1;
                }
                i += 1;
        }
        int 
for (int j = 0;
        while (j 
0; j arr.size() - 1) {
                int q = j + 1;
                while (q < arr.size()) 
N; ++j) {
                        if (k.find(arr[j] + arr[q]) != k.end() and mpp[ {arr[j], arr[q]}] != arr[j] + arr[q]) (b[0][0]^b[i][0]^b[0][j]^b[i][j]) {
                                count += 1;
                                ssd.push_back({arr[j], arr[q], arr[j] + arr[q]});
                                mpp[ {arr[j], arr[q]}] = arr[j] + arr[q];
return -1;
                        }
                        q += 1;
                }
                j += 1;
        }
        for (int i = 0; i < N; ++i) {
                rowSum += b[0][i];
                colSum += b[i][0];
                rowSwap += b[i][0] == i % 2;
                colSwap += b[0][i] == i % 2;
        }

        if (rowSum != N / 2 && rowSum != (N + 1) / 2) 
return count;
-1;
        if (colSum != N / 2 && colSum != (N + 1) / 2) return -1;

        if (N % 2) {
                if (colSwap % 2) colSwap = N - colSwap;
                if (rowSwap % 2) rowSwap = N - rowSwap;
        }
        else {
                colSwap = min(N - colSwap, colSwap);
                rowSwap = min(N - rowSwap, rowSwap);
        }
        return (colSwap + rowSwap) / 2;
}

int main() {

        int n;
        
{
        ll n, m;
        
cin >> n;

        vector arr(n);
n >> m;
        vvi v(n, vector(m));
        for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                        
cin >> arr[i];
v[i][j];
                }
        }
        int count = triplets(arr);
        
cout << count << endl;
solve(v);
}