Cod sursa(job #556093)

Utilizator raul1520Raul Andrei raul1520 Data 15 martie 2011 22:17:30
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <cstdio>
using namespace std;
int n,m,a[17][17],b[17][17],slb[17],scb[17],slb2[17],smax,scb2[17],sc[17],sc2[17],sl[17],sl2[17],i,j,s,p;
void Citeste()
{
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		sl[i]=0;
		sc[i]=0;
		for(j=1;j<=m;j++)
		{
			scanf("%d",&a[i][j]);
			b[i][j]=a[i][j];
			sl[i]=slb[i]=sl[i]+a[i][j];
			sc[j]=scb[i]=sc[j]+a[i][j];
			
		}
	}
}
void schimba(int i,int p)
{
	if(p==1)
	{
		for(j=1;j<=n;j++)
		{
			a[i][j]=a[i][j]*-1;
			sl2[i]=sl2[i]+a[i][j];
		}
		if(sl[i]<=sl2[i])
			sl[i]=sl2[i];
	}
	else if(p==2)
	{
		for(j=1;j<=n;j++)
		{
			a[j][i]=a[j][i]*-1;
			sc2[i]=sc2[i]+a[j][i];
		}
		if(sc[i]<=sc2[i])
		{
			sc[i]=sc2[i];
		}
	}
}
void schimbab(int i,int p)
{
	if(p==1)
	{
		for(j=1;j<=n;j++)
		{
			b[i][j]=b[i][j]*-1;
			slb2[i]=slb2[i]+b[i][j];
		}
		if(slb[i]<=slb2[i])
			slb[i]=slb2[i];
	}
	else if(p==2)
	{
		for(j=1;j<=n;j++)
		{
			b[j][i]=b[j][i]*-1;
			scb2[i]=scb2[i]+b[j][i];
		}
		if(scb[i]<=scb2[i])
		{
			scb[i]=scb2[i];
		}
	}
}
void Scrie()
{
	printf("%d",smax);
}
int main()
{
	Citeste();
	for(i=1;i<=n;i++)
	{
		schimba(i,1);
		if(sl[i]>sl2[i])
			schimba(i,1);
		for(j=1;j<=n;j++)
		{
			sc[j]=sc[j]-a[i][j]+a[i][j];
		}
	}
	for(i=1;i<=m;i++)
	{
		schimba(i,2);
		if(sc[i]>sc2[i])
			schimba(i,2);
		for(j=1;j<=n;j++)
		{
			sl[j]=sl[j]-a[i][j]+a[i][j];
		}
	}
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			s=s+a[i][j];
	if(s>smax)
	{
		smax=s;
	}
	for(i=1;i<=m;i++)
	{
		schimbab(i,2);
		if(scb[i]>scb2[i])
			schimbab(i,2);
		for(j=1;j<=n;j++)
		{
			slb[j]=slb[j]-b[i][j]+b[i][j];
		}
	}
	for(i=1;i<=n;i++)
	{
		schimbab(i,1);
		if(slb[i]>slb2[i])
			schimbab(i,1);
		for(j=1;j<=n;j++)
		{
			scb[j]=scb[j]-b[i][j]+b[i][j];
		}
	}
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			s=s+b[i][j];
	if(s>smax)
		smax=s;
	Scrie();
	return 0;
}