Pagini recente » Cod sursa (job #2128389) | Cod sursa (job #1564303) | Cod sursa (job #2827810) | Cod sursa (job #2213765) | Cod sursa (job #300669)
Cod sursa(job #300669)
#include<fstream>
#include<iostream>
#define sizelimit 18
using namespace std;
int array[sizelimit][sizelimit];
int n, m;
/*********************************
* READ FROM FILE *
*********************************/
void read()
{
ifstream in ("flip.in");
in>>n>>m;
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
in>>array[i][j];
in.close();
}
/*********************************
* COMUTA *
*********************************/
void comutalinia(int linia)
{
for (int i=0;i<m;i++)
array[linia][i]*=-1;
}
void comutacoloana(int coloana)
{
for (int i=0;i<n;i++)
array[i][coloana]*=-1;
}
/*********************************
* SUMA *
*********************************/
long long suma()
{
long long temp=0;
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
temp+=array[i][j];
return temp;
}
/*********************************
* FIND BEST SOLUTIONS *
*********************************/
long long findsol()
{
int negs, poss, s;
bool comutat;
long long max;
do {
comutat=false;
for (int i=0;i<n;i++) {
negs=0; poss=0;
for (int j=0;j<n;j++) {
if (array[i][j]<=0) negs++;
else poss++;
}
if (negs>poss) {
comutalinia(i);
comutat=true;
}
else if (negs==poss) {
max=suma();
comutalinia(i);
s=suma();
if (s>max) comutat=true;
else comutalinia(i);
}
}
for (int j=0;j<m;j++) {
negs=0; poss=0; s=0;
for (int i=0;i<n;i++) {
if (array[i][j]<=0) negs++;
else poss++;
s+=array[i][j];
}
if (negs>poss) {
comutacoloana(j);
comutat=true;
}
else if (negs==poss) {
max=suma();
comutacoloana(j);
s=suma();
if (s>max) comutat=true;
else comutacoloana(j);
}
}
} while (comutat);
return suma();
}
/*********************************
* MAIN function *
*********************************/
int main()
{
long long temp;
/// read data from file
read();
/// find solutions
temp=findsol();
/// output solutions
ofstream out ("flip.out");
out<<temp;
/// cleanup
out.close();
return 0;
}