Cod sursa(job #305154)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 16 aprilie 2009 14:24:52
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>

long a[17][17],l[17],c[17],l0[17],c0[17],i,j,n,m,minus;
long long sum;


void linie(int k)
{long ii;
for(ii=1; ii<=m; ii++){a[k][ii]*=-1;c[ii]+=2*a[k][ii];} l[k]*=-1;
sum+=2*l[k];
}
void coloana(int k)
{long ii;
for(ii=1; ii<=n; ii++){a[ii][k]*=-1;l[ii]+=2*a[ii][k];}  c[k]*=-1;
sum+=2*c[k];
}

int main(void){

freopen("flip.in","r",stdin);
freopen("flip.out","w",stdout);


scanf("%ld %ld",&n,&m);
for(i=1; i<n+1; i++)for(j=1; j<m+1; j++)
{ scanf("%ld ",&a[i][j]); l[i]+=a[i][j]; c[j]+=a[i][j]; sum+=a[i][j]; if(a[i][j]!=0)l0[i]++,c0[j]++; }
for(i=1; i<=n; i++)if(l[i]<=0)minus++;
for(i=1; i<=m; i++)if(c[i]<=0)minus++;




while(minus)
{
minus=0;

for(i=1; i<=n; i++)if((l[i]<=0 && l0[i]!=0) || l[i]<0 )linie(i); 
for(i=1; i<=m; i++) if((c[i]<=0 &&c0[i]!=0)||c[i]<0 )coloana(i); 

for(i=1; i<=n; i++)if((l[i]<=0 && l0[i]!=0) || l[i]<0 ) minus++;
for(i=1; i<=m; i++)if((c[i]<=0 &&c0[i]!=0)||c[i]<0 )minus++;

}
printf("%lld",sum);


return 0;

}