Pagini recente » Cod sursa (job #1787137) | Cod sursa (job #358866) | Cod sursa (job #2318936) | Cod sursa (job #1774934) | Cod sursa (job #560902)
Cod sursa(job #560902)
#include <iostream>
#include <fstream>
const int d = 16;
bool x = false;
void citire ( int a[d][d], int &n, int &m );
void afisare ( int a[d][d], int n, int m );
int cont ( int a[d][d], int n, int m, int pas );
void back ( int a[d][d], int n, int m, int pas );
int main ()
{
int a[d][d], pas, n, m;
citire(a,n,m);
back(a,n,m,pas);
afisare(a,n,m);
return 0;
}
void citire ( int a[d][d], int &n, int &m )
{
std::ifstream f("flip.in");
f >> n >> m;
for ( int i=0; i<n; i++ )
for ( int j=0; j<m; j++ )
f >> a[i][j];
f.close();
}
void afisare ( int a[d][d], int n, int m )
{
int s = 0;
for ( int i=0; i<n; i++ )
for ( int j=0; j<m; j++ )
s += a[i][j];
std::ofstream g("flip.out");
g << s;
g.close();
}
int cont ( int a[d][d], int n, int m, int pas )
{
bool ok = false;
if ( pas > n-1 )
{
pas -= n;
ok = true;
}
if ( !ok )
{
int s1 = 0, s2 = 0;
for ( int j=0; j<m; j++ )
{
s1 += a[pas][j];
s2 += a[pas][j] * (-1);
}
if ( s2 > s1 )
{
for ( int j=0; j<m; j++ )
a[pas][j] *= -1;
return 1;
}
}
else
{
int s1 = 0, s2 = 0;
for ( int j=0; j<n; j++ )
{
s1 += a[j][pas];
s2 += a[j][pas] * (-1);
}
if ( s2 > s1 )
{
for ( int j=0; j<n; j++ )
a[j][pas] *= -1;
return 1;
}
}
return 0;
}
void back ( int a[d][d], int n, int m, int pas )
{
if ( !x )
{
for ( int i=0; i<n+m && !x ; i++ )
{
pas = i;
if ( cont (a,n,m,pas) )
back(a,n,m,pas);
}
x = true;
}
}