Pagini recente » Cod sursa (job #1288212) | Cod sursa (job #1127774) | Cod sursa (job #2782597) | Cod sursa (job #2337738) | Cod sursa (job #2020432)
#include <stdio.h>
void update(int n, int m, int (*matrix)[17]) {
int i, j;
matrix[0][0] = 0;
for ( i = 1; i <= n; i++ ) {
matrix[i][0] = 0;
for ( j = 1; j <= m; j++ )
matrix[i][0] += matrix[i][j];
matrix[0][0] += matrix[i][0];
}
for ( j = 1; j <= m; j++ ) {
matrix[0][j] = 0;
for ( i = 1; i <= n; i++ )
matrix[0][j] += matrix[i][j];
}
}
void changeLine(int line, int m, int (*matrix)[17]) {
for ( int i = 1; i <= m; i++ )
matrix[line][i] *= -1;
}
void changeColumn(int column, int n, int (*matrix)[17]) {
for ( int i = 1; i <= n; i++ )
matrix[i][column] *= -1;
}
int getLineMin(int n, int (*matrix)[17]) {
int min = 1;
for ( int i = 2; i <= n; i++ )
if ( matrix[min][0] > matrix[i][0] )
min = i;
return min;
}
int getColumnMin(int m, int (*matrix)[17]) {
int min = 1;
for ( int j = 2; j <= m; j++ )
if ( matrix[0][min] > matrix[0][j] )
min = j;
return min;
}
int main() {
int matrix[17][17];
int i, j, m, n;
int minLine, minColumn;
FILE *in, *out;
in = fopen("flip.in", "r");
if ( in == NULL ) return 1;
fscanf(in, "%d %d", &n, &m);
for ( i = 1; i <= n; i++ )
for ( j = 1; j <= m; j++ )
fscanf(in, "%d", &matrix[i][j]);
fclose(in);
update(n, m, matrix);
minLine = getLineMin(n, matrix);
minColumn = getColumnMin(m, matrix);
while ( matrix[minLine][0] < 0 || matrix[0][minColumn] < 0 ) {
if ( matrix[minLine][0] < matrix[0][minColumn] ) changeLine(minLine, m, matrix);
else changeColumn(minColumn, n, matrix);
update(n, m, matrix);
minLine = getLineMin(n, matrix);
minColumn = getColumnMin(m, matrix);
}
out = fopen("flip.out", "w");
if ( out == NULL ) return 1;
fprintf(out, "%d", matrix[0][0]);
fclose(out);
return 0;
}