Pagini recente » Cod sursa (job #953212) | Cod sursa (job #1605644) | Cod sursa (job #349421) | Cod sursa (job #2916088) | Cod sursa (job #695653)
Cod sursa(job #695653)
#include <stdio.h>
#include <iostream>
#define ifile "flip.in", "r"
#define ofile "flip.out", "w"
using namespace std;
FILE * f=fopen(ifile);
FILE * g=fopen(ofile);
#define TMax 17
#define COMMax 33
// N M N linii
int T[TMax][TMax], N, M, L[TMax], COM[COMMax], SMax = 0;
int step1()
{
for(int i = 0; i < COMMax; i++) COM[i] = 0;
fscanf(f, "%d %d", &N, &M);
for(int i = 0; i < N; i++)
for(int j = 0; j < M; j++)
fscanf(f, "%d", &T[i][j]),
L[i] += T[i][j];
return 0;
}
int sumUp()
{
int cSum = 0;
for(int i = 0; i < N; i++) cSum += L[i];
if(cSum > SMax) SMax = cSum;
return cSum;
}
int cSwitch(int c)
{
for(int i = 0; i < N; i++)
{
int prev = T[i][c];
T[i][c] *= -1;
L[i] = L[i] - prev + T[i][c];
}
return 0;
}
int lSwitch(int l)
{
int lSum = 0;
for(int i = 0; i < M; i++)
{
T[l][i] *= -1;
lSum += T[l][i];
}
L[l] = lSum;
return 0;
}
int doCOM()
{
for(int i = 0; i < COMMax; i++)
{
if(COM[i] == 0) { COM[i] = 1; break; }
if(COM[i] == 1) { COM[i] = 0; COM[i + 1]++; if(COM[i + 1] == 1) break; }
if(COM[i] == 2) { COM[i] = 0; COM[i + 1]++; if(COM[i + 1] == 1) break; }
}
return 0;
}
int handleCOM()
{
for(int i = 0; i < N; i++)
if(COM[i]) lSwitch(i);
for(int i = 0; i < M; i++)
if(COM[N + i]) cSwitch(i);
return 0;
}
int step2()
{
while(COM[N + M] == 0)
{
doCOM();
handleCOM();
sumUp();
handleCOM();
}
return 0;
}
int step3()
{
fprintf(g, "%d", SMax);
return 0;
}
int main()
{
step1();
step2();
step3();
return 0;
}