Pagini recente » Cod sursa (job #2262918) | Cod sursa (job #771427) | Cod sursa (job #1937406) | Cod sursa (job #2943887) | Cod sursa (job #2830502)
#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 minRowSumIndex = 0;
for (int row = 1; row < rows; ++row) {
if (rowSum[row] < rowSum[minRowSumIndex]) {
minRowSumIndex = row;
}
}
int minColSumIndex = 0;
for (int col = 1; col < cols; ++col) {
if (colSum[col] < colSum[minRowSumIndex]) {
minColSumIndex = col;
}
}
if (rowSum[minRowSumIndex] < colSum[minColSumIndex] && rowSum[minRowSumIndex] < 0) {
for (int col = 0; col < cols; ++col) {
matrix[minRowSumIndex][col] *= -1;
}
} else if (colSum[minColSumIndex] < rowSum[minRowSumIndex] && colSum[minColSumIndex] < 0) {
for (int row = 0; row < rows; ++row) {
matrix[row][minColSumIndex] *= -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;
}