Cod sursa(job #605752)
Utilizator | Data | 1 august 2011 21:46:37 | |
---|---|---|---|
Problema | Jocul Flip | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.66 kb |
#include<fstream>
using namespace std;
int a[17][17];//initializare
int main()
{
int n,m,i,j,max;
ifstream fin("flip.in");
fin>>n>>m;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
{
fin>>a[i][j];
if(a[i][j]<0)
{
a[i][0]+=a[i][j];
a[0][j]+=a[i][j];//fac sumele pe linie si coloana
}
else
{
a[i][m+1]+=a[i][j];
a[n+1][j]+=a[i][j];//fac sumele pe linie si coloana
}
a[0][0]+=a[i][j];//fac suma totala
}
int gata=0;
max=a[0][0];
while(!gata)
{
gata=1;
for(i=1;i<=n;++i)//pe linie
if(-a[i][0]>a[i][m+1])
{
gata=0;
for(j=1;j<=m;++j)
{
a[0][0]-=2*a[i][j];//revine la initial si se schimba cum trebuie
if(a[i][j]<0)
{
a[i][0]-=2*a[i][j];
a[0][j]-=2*a[i][j];//pe coloana
}
else
{
a[i][m+1]-=2*a[i][j];
a[n+1][j]-=2*a[i][j];//pe coloana
}
a[i][j]=-a[i][j];//fac pasul
/*a[0][0]+=a[i][j];//creste sau scade dupa cum trebuie
if(a[i][j]<0)
{
a[i][0]+=a[i][j];
a[0][j]+=a[i][j];//pe coloana
}
else
{
a[i][m+1]+=a[i][j];
a[n+1][j]+=a[i][j];//pe coloana
}*/
}
if(max<a[0][0])max=a[0][0];
}
for(j=1;j<=m;++j)//pe coloana
if(-a[0][j]>a[n+1][j])
{
gata=0;
for(i=1;i<=n;++i)
{
a[0][0]-=2*a[i][j];
if(a[i][j]<0)
{
a[0][j]-=2*a[i][j];
a[i][0]-=2*a[i][j];//pe linie
}
else
{
a[n+1][j]-=2*a[i][j];
a[i][m+1]-=2*a[i][j];//pe linie
}
a[i][j]=-a[i][j];//fac pasul
//a[0][0]+=a[i][j];//creste sau scade dupa cum trebuie
/*if(a[i][j]<0)
{
a[0][j]+=a[i][j];
a[i][0]+=a[i][j];//pe linie
}
else
{
a[0][j]+=a[i][j];
a[i][m+1]+=a[i][j];//pe linie
}*/
}
if(max<a[0][0])max=a[0][0];
}
}
FILE *f=fopen("flip.out","w");
fprintf(f,"%d ",max);
return 0;
}