Pagini recente » Profil iland | Rating Antonio Codrea (tonicodrea) | Profil Mircea12 | bruh | Cod sursa (job #2830510)
#include <stdio.h>
#define MAX_ROWS 16
#define MAX_COLS 16
void updateSums(int matrix[][MAX_COLS], int *rowSum, int *colSum, unsigned rows, unsigned cols) {
for (int row = 0; row < rows; ++row) {
int rowSumTemp = 0;
for (int col = 0; col < cols; ++col) {
rowSumTemp += matrix[row][col];
}
rowSum[row] = rowSumTemp;
}
for (int col = 0; col < cols; ++col) {
int colSumTemp = 0;
for (int row = 0; row < rows; ++row) {
colSumTemp += matrix[row][col];
}
colSum[col] = colSumTemp;
}
}
int main() {
char *inFileName = "flip.in";
char *outFileName = "flip.out";
FILE *in = fopen(inFileName, "r");
if (in == NULL) {
printf("Cannot open %s.\n", inFileName);
return 1;
}
FILE *out = fopen(outFileName, "w");
unsigned rows;
unsigned cols;
fscanf(in, "%u %u", &rows, &cols);
int matrix[MAX_ROWS][MAX_COLS];
int rowSum[MAX_ROWS] = {0};
int colSum[MAX_COLS] = {0};
int maxSum = 0;
for (int row = 0; row < rows; ++row) {
for (int col = 0; col < cols; ++col) {
fscanf(in, "%d", &matrix[row][col]);
maxSum += matrix[row][col];
}
}
while (1) {
updateSums(matrix, rowSum, colSum, rows, cols);
int sumOnRows = 0;
for (int row = 0; row < rows; ++row) {
if (rowSum[row] < 0) {
sumOnRows += rowSum[row];
}
}
int sumOnCols = 0;
for (int col = 0; col < cols; ++col) {
if (colSum[col] < 0) {
sumOnCols += colSum[col];
}
}
if (sumOnRows < sumOnCols) {
for (int row = 0; row < rows; ++row) {
if (rowSum[row] < 0) {
for (int col = 0; col < cols; ++col) {
matrix[row][col] *= -1;
}
}
}
} else {
for (int col = 0; col < cols; ++col) {
if (colSum[col] < 0) {
for (int row = 0; row < rows; ++row) {
matrix[row][col] *= -1;
}
}
}
}
int sum = 0;
for (int row = 0; row < rows; ++row) {
for (int col = 0; col < cols; ++col) {
sum += matrix[row][col];
}
}
if (sum > maxSum) {
maxSum = sum;
} else {
break;
}
}
fprintf(out, "%d", maxSum);
fclose(in);
fclose(out);
return 0;
}