Pagini recente » Cod sursa (job #2423954) | Cod sursa (job #2094473) | Statistici Stefan Catalina (StefanCatalina) | Cod sursa (job #2490665) | Cod sursa (job #2195288)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void readFile(int &m, int &n, int ** &matrix) {
ifstream in;
in.open("flip.in");
if (in.fail()) {
cerr << "Cannot open this file.";
exit(1);
}
in >> m;
in >> n;
matrix = new int *[m];
for (int i = 0; i < m; ++i)
matrix[i] = new int[n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
in >> matrix[i][j];
}
}
in.close();
}
int getSum(int m, int n, int ** matrix) {
int sum = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
sum += matrix[i][j];
}
}
return sum;
}
int getColumnSum(int n, int column, int ** matrix) {
int sum = 0;
for(int i = 0; i < n; i++)
sum += matrix[i][column];
return sum;
}
int getFlipColumnSum(int n, int column, int ** matrix) {
int sum = 0;
for(int i = 0; i < n; i++)
sum += -matrix[i][column];
return sum;
}
int flipColumn(int n, int column, int ** matrix) {
for(int i = 0; i < n; i++)
matrix[i][column] = -matrix[i][column];
}
int getRowSum(int n, int row, int ** matrix) {
int sum = 0;
for(int i = 0; i < n; i++)
sum += matrix[row][i];
return sum;
}
int getFlipRowSum(int n, int row, int ** matrix) {
int sum = 0;
for(int i = 0; i < n; i++)
sum += -matrix[row][i];
return sum;
}
int flipRow(int n, int row, int ** matrix) {
for(int i = 0; i < n; i++)
matrix[row][i] = -matrix[row][i];
}
int getResult(int &m, int &n, int ** &matrix) {
int currentSum = 0;
int maximumSum = 0;
do {
if(currentSum > maximumSum)
maximumSum = currentSum;
for (int i = 0; i < m; i++) {
int sum = getRowSum(n, i, matrix);
int flipSum = getFlipRowSum(n, i, matrix);
if (sum < flipSum)
flipRow(n, i, matrix);
}
for (int i = 0; i < n; i++) {
int sum = getColumnSum(m, i, matrix);
int flipSum = getFlipColumnSum(m, i, matrix);
if (sum < flipSum)
flipColumn(m, i, matrix);
}
currentSum = getSum(m, n, matrix);
}while(currentSum != maximumSum);
return maximumSum;
}
void writeFile(int answer) {
ofstream out;
out.open("flip.out");
if(out.is_open()) {
out << answer;
} else {
cerr << "Failed to create file.";
exit(2);
}
}
int main() {
int m, n;
int **matrix;
readFile(m, n, matrix);
getResult(m, n, matrix);
writeFile(getResult(m, n, matrix));
return 0;
}