Cod sursa(job #147029)
Utilizator | Data | 2 martie 2008 15:20:10 | |
---|---|---|---|
Problema | Jocul Flip | Scor | 20 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.83 kb |
//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;
}