Pagini recente » Cod sursa (job #1449215) | Cod sursa (job #2404683)
#include <fstream>
#define Nmax 16
using namespace std;
/*Vectori caracterstici
SL[i] -> suma de pe linia i
SC[i] -> suma de pe coloana i
*/
int SL[Nmax],SC[Nmax];
void citire(int &n,int &m,int a[][Nmax])
{ifstream in("flip.in");
in>>n>>m;
/*In functie construim si vectorii caracteristici */
for(int l=0; l<n; l++)
for(int c=0; c<m; c++)
{
in>>a[l][c];
SL[l]+=a[l][c];
SC[c]+=a[l][c];
}
in.close();
}
void inversare(int n,int m,int a[][Nmax])
{/*O linie sau o coloana se inverseaza <=> suma sa este negativa */
for(int l=0; l<n; l++)
if(SL[l]<0)
{/*actualizam sumele coloanelor */
for(int c=0; c<m; c++)
{
a[l][c]=-a[l][c];
SC[c]+=a[l][c];
}
SL[l]=-SL[l];
}
for(int c=0; c<m; c++)
if(SC[c]<0)
{/*actualizam sumele liniilor */
for(int l=0; l<n; l++)
{
a[l][c]=-a[l][c];
SL[l]+=a[l][c];
}
SC[c]=-SC[c];
}
}
int sumaMaxima(int n,int m,int a[][Nmax])
{
inversare(n,m,a);
/*calculam suma matricei dupa inversare */
int S=0;
for(int l=0; l<n; l++)
for(int c=0; c<m; c++)
S+=a[l][c];
return S;
}
int main()
{
int n,m;/*dimensiunile matricei */
int a[Nmax][Nmax];
citire(n,m,a);
ofstream out("flip.out");
out<<sumaMaxima(n,m,a)<<'\n';
out.close();
return 0;
}