Cod sursa(job #80424)

Utilizator Astrid28Ruxandra Cohal Astrid28 Data 27 august 2007 22:15:06
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.45 kb
#include<stdio.h>

int n,m;
long nr[16][16];
long smax;
struct valori
       {long p,n;}l[16],c[16];
FILE *fin,*fout;


void adaugare(int i,int j)
{
  if (nr[i][j]>0) {l[i].p+=nr[i][j]; c[j].p+=nr[i][j];}
	 else {l[i].n+=nr[i][j]; c[j].n+=nr[i][j];}
}



void citire()
{
  int i,j;
  fin=fopen("flip.in","r");
  fout=fopen("flip.out","w");
  fscanf(fin,"%d %d",&n,&m);
  for (i=0;i<n;i++)
    for (j=0;j<m;j++)
      {fscanf(fin,"%ld",&nr[i][j]);
       adaugare(i,j);
       smax+=nr[i][j];
      }
  fclose(fin);
}


void calculeaza()
{
  int i,j,difl,difc,i2,j2;
  difl=difc=0;
  for (i=0;i<n;i++)
    if (-l[i].n-l[i].p>difl) {difl=-l[i].n-l[i].p; i2=i;}
  for (j=0;j<m;j++)
    if (-c[j].n-c[j].p>difc) {difc=-c[j].n-c[j].p; j2=j;}
  if (difl>0 || difc>0)
    {if (difl>=difc) {smax-=l[i2].p+l[i2].n;
		      for (j=0;j<m;j++)
		       {
			l[i2].p-=nr[i2][j];
			l[i2].n-=nr[i2][j];
			c[j].p-=nr[i2][j];
			c[j].n-=nr[i2][j];
		       }
		      nr[i2][j]=-nr[i2][j];
		      smax+=l[i2].p+l[i2].n;
		     }
      else {smax-=c[j2].p+c[j2].n;
	    for (i=0;i<n;i++)
	     {
	       l[i].p-=nr[i][j2];
	       l[i].n-=nr[i][j2];
	       c[j2].p-=nr[i][j2];
	       c[j2].n-=nr[i][j2];

	     }
	    smax+=c[j2].p+c[j2].n;
	   }
     calculeaza();
    }
}



void afisare()
{
  fprintf(fout,"%ld\n",smax);
  fclose(fout);
}



void main()
{
  smax=0;
  citire();
  calculeaza();
  afisare();
}