Pagini recente » Cod sursa (job #2712403) | Cod sursa (job #1120094) | Cod sursa (job #1883052) | Cod sursa (job #883305) | Cod sursa (job #509419)
Cod sursa(job #509419)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int n, m;
int table[100][100];
ifstream in("flip.in");
ofstream out("flip.out");
in >> n >> m;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
in >> table[i][j];
}
in.close();
int sumn = 0, sumf = 0; /* sum of current state and sum of flipped state */
int sum = 0, lastsum = 0;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
lastsum += table[i][j];
}
while(true) /* loop is broken automatically when lastsum == sum */
{
for(int i = 0; i < n; i++) /* line id */
{
for(int j = 0; j < m; j++)
{
sumn += table[i][j];
sumf += (table[i][j] * -1);
}
if(sumn < sumf)
{
for(int j = 0; j < m; j++)
table[i][j] = (table[i][j] * -1);
sumn = sumf;
}
sumn = sumf = 0; /* reset sums */
}
for(int j = 0; j < m; j++)
{
for(int i = 0; i < n; i++)
{
sumn += table[i][j];
sumf += (table[i][j] * -1);
}
if(sumn < sumf)
{
for(int i = 0; i < n; i++)
table[i][j] = (table[i][j] * -1);
}
sum += sumn;
sumn = sumf = 0;
}
if(lastsum == sum) /* no more possible moves */
{
out << sum;
out.close();
break;
}
lastsum = sum;
sum = 0;
}
return 0;
}