Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2000301) | Cod sursa (job #2012746) | Cod sursa (job #1009984)
#include <iostream>
#include <fstream>
using namespace std;
int n, m;
int a[17][17];
bool invertion = true;
int main()
{
ifstream input("flip.in");
input >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
input >> a[i][j];
}
}
// Find the most negative row or column and invert it,
// until no more negative rows or columns exist.
int min_sum = -1;
while (min_sum < 0) {
min_sum = 0;
int min_index;
int is_row;
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = 0; j < m; j++) {
sum += a[i][j];
}
if (sum < min_sum) {
min_sum = sum;
min_index = i;
is_row = true;
}
}
for (int j = 0; j < m; j++) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += a[i][j];
}
if (sum < min_sum) {
min_sum = sum;
min_index = j;
is_row = false;
}
}
if (min_sum < 0) {
if (is_row) {
for (int j = 0; j < m; j++) {
a[min_index][j] = -a[min_index][j];
}
} else {
for (int i = 0; i < n; i++) {
a[i][min_index] = -a[i][min_index];
}
}
}
}
// Calculate the matrix sum
int sum = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
sum += a[i][j];
}
}
ofstream output("flip.out");
output << sum;
}