Cod sursa(job #21088)

Utilizator dragomir_andreiDragomir Andrei dragomir_andrei Data 22 februarie 2007 21:38:45
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>
long int a[17][17],v[17],o[17],s;
int m,n,i,j,ok;
int linie(int i)
{o[i]=-o[i];for(j=1;j<=m;j++){a[i][j]=-a[i][j];v[j]+=2*a[i][j];}return 0;}
int coloana(int i)
{v[i]=-v[i];for(j=1;j<=n;j++){a[j][i]=-a[j][i];o[j]+=2*a[j][i];}return 0;}
int verlin()
{for(i=1;i<=n;i++) if(o[i]<0) {linie(i);ok++;}return 0;}
int vercol()
{for(i=1;i<=m;i++) if(v[i]<0) {coloana(i);ok++;}return 0;}
int verlin0()
{for(i=1;i<=n;i++) if(o[i]==0){linie(i);vercol();}return 0;}
int vercol0()
{for(i=1;i<=m;i++) if(v[i]==0){coloana(i);verlin();}return 0;}

int main()
{
FILE *f;
f=fopen("flip.in","r");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
	{fscanf(f,"%ld",&a[i][j]);
	o[i]+=a[i][j];
	v[j]+=a[i][j];
	}
fclose(f);
do
{ok=0;
verlin();
vercol();
vercol0();
verlin0();
}
while(ok);
for(i=1;i<=n;i++) s+=o[i];
f=fopen("flip.out","w");
fprintf(f,"%ld\n",s);
fclose(f);
return 0;
}