Pagini recente » Cod sursa (job #942488) | Cod sursa (job #1604054) | Cod sursa (job #320074) | Cod sursa (job #824150) | Cod sursa (job #2085215)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <climits>
using namespace std;
int n, m;
int *mat;
int *rows;
int *cols;
bool r;
int total = 0;
void nullify() {
for (int i = 0; i < n; i++) {
rows[i] = 0;
}
for (int i = 0; i < m; i++) {
cols[i] = 0;
}
}
void be() {
ifstream f("flip.in");
f >> n >> m;
mat = new int[n * m];
for (int i = 0; i < n * m; i++) {
f >> mat[i];
}
rows = new int[n];
cols = new int[m];
f.close();
}
void megold() {
bool can = true;
while (can) {
nullify();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
rows[i] += mat[i * m + j];
cols[j] += mat[i * m + j];
}
}
int sm = INT_MAX;
int smi = -1;
r = true;
for (int i = 0; i < n; i++) {
if (rows[i] < sm) {
sm = rows[i];
smi = i;
}
}
for (int i = 0; i < m; i++) {
if (cols[i] < sm) {
sm = cols[i];
smi = i;
r = false;
}
}
if (sm >= 0) {
can = false;
} else {
if (r) {
for (int i = 0; i < m; i++) {
mat[smi * m + i] = -mat[smi * m + i];
}
} else {
for (int i = 0; i < n; i++) {
mat[i * m + smi] = -mat[i * m + smi];
}
}
}
}
for (int i = 0; i < m * n; i++) {
total += mat[i];
}
}
void ki() {
ofstream g("flip.out");
g << total;
g.close();
}
int main() {
be();
megold();
ki();
}