Cod sursa(job #605763)
Utilizator | Data | 1 august 2011 22:09:35 | |
---|---|---|---|
Problema | Jocul Flip | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.45 kb |
#include<fstream>
//#include<iostream>
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
}
/*for(i=0;i<=n+1;++i)
{
for(j=0;j<=m+1;++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;*/
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
a[i][0]-=a[i][j];
a[i][m+1]-=a[i][j];
a[0][j]-=a[i][j];//pe coloana
a[n+1][j]-=a[i][j];
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];
a[0][j]-=a[i][j];
a[n+1][j]-=a[i][j];
a[i][0]-=a[i][j];//pe linie
a[i][m+1]-=a[i][j];
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];
}
}
/*for(i=0;i<=n+1;++i)
{
for(j=0;j<=m+1;++j)
cout<<a[i][j]<<" ";
cout<<endl;
}*/
FILE *f=fopen("flip.out","w");
fprintf(f,"%d ",max);
return 0;
}