Pagini recente » Cod sursa (job #1685602) | Cod sursa (job #2623613) | Cod sursa (job #3215617) | Profil AndiCraciun | Cod sursa (job #1458495)
#include <fstream>
#include <iostream>
#define LIN 0
#define COL 1
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
struct nod{
bool tip;
int key;
};
int N,M, A[20][20], L[20], C[20],cod,rs;
nod coada[100000];
void inv_lin(int i){
if(L[i] < 0)
for(int j = 1;j<=N;j++){
A[i][j] *= -1;
C[j] += A[i][j]*2;
L[i] += A[i][j]*2;
if(C[j] < 0)
coada[++cod].key = j,
coada[cod].tip = COL;
}
}
void inv_col(int i){
if(C[i] < 0)
for(int j = 1;j<=M;j++){
A[j][i] *=-1;
L[j] += A[j][i]*2;
C[i] += A[j][i]*2;
if(L[j] < 0)
coada[++cod].key = j,
coada[cod].tip = LIN;
}
}
void solve(){
int i = 1,j,k;
while(i <= cod){
if(coada[i].tip == LIN){
inv_lin(coada[i].key);
}else{
inv_col(coada[i].key);
}
i++;
}
}
int main(){
int i,j;
fin >> M >> N;
for(i = 1;i<=N;i++)
for(j = 1;j<=M;j++){
fin >> A[i][j];
L[i] += A[i][j];
C[j] += A[i][j];
}
for(i = 1;i<= N;i++)
if(L[i] < 0)
coada[++cod].key = i,
coada[cod].tip = LIN;
for(i = 1;i<= M;i++)
if(C[i] < 0)
coada[++cod].key = i,
coada[cod].tip = COL;
solve();
for(i = 1;i<= N;i++) rs+= L[i];
fout << rs;
return 0;
}