Pagini recente » Diferente pentru planificare/sedinta-20090216 intre reviziile 45 si 46 | Egal | Diferente pentru planificare/sedinta-20071107 intre reviziile 33 si 32 | Istoria paginii junior-challenge-2008 | Cod sursa (job #147029)
Cod sursa(job #147029)
//jocul flip
#include"fstream"
#include"math.h"
#define dim 18
using namespace std;
void comutare_linie(int i);
void comutare_coloana(int j);
long a[dim][dim];
int n,m;
void citire()
{
ifstream fin("flip.in");
fin>>m>>n;
int i,j;
for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
fin>>a[i][j];
fin.close();
}
void flip()
{
long maxpoz,maxneg;
int i,j; //presupun ca maxpoz > |maxneg|
for(i=1;i<=m;++i) //fiecare linie
{
maxpoz=maxneg=0;
for(j=1;j<=n;++j)
{
if(a[i][j]>=0)
maxpoz+=a[i][j];
if(a[i][j]<0)
maxneg-=a[i][j];
}
maxneg=labs(maxneg);
if(maxpoz<maxneg) //daca ii falsa presupunerea;
comutare_linie(i);
}
for(j=1;j<=n;++j) //fiecare coloana
{
maxpoz=maxneg=0;
for(i=1;i<=m;++i)
{
if(a[i][j]>=0)
maxpoz+=a[i][j];
if(a[i][j]<0)
maxneg-=a[i][j];
}
maxneg=labs(maxneg);
if(maxpoz<maxneg)
comutare_coloana(j);
}
}
void comutare_linie(int i)
{
int j;
for(j=1;j<=n;++j)
a[i][j]=(-1)*a[i][j];
}
void comutare_coloana(int j)
{
int i;
for(i=1;i<=m;++i)
a[i][j]=(-1)*a[i][j];
}
void afisare()
{
ofstream fout("flip.out");
int suma=0,i,j;
for(i=1;i<=m;++i)
{
for(j=1;j<=n;++j)
// fout<<a[i][j]<<" ";
// fout<<"\n";
suma+=a[i][j];
}
fout<<"\n"<<suma;
fout.close();
}
int main()
{
citire();
flip();
afisare();
return 0;
}