Pagini recente » Cod sursa (job #2337573) | Cod sursa (job #544159) | Cod sursa (job #1911387) | Cod sursa (job #1168737) | Cod sursa (job #80599)
Cod sursa(job #80599)
#include<stdio.h>
int n,m;
long nr[16][16];
long s;
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);
s+=nr[i][j];
}
fclose(fin);
}
void calculeaza()
{
int i,j,k1,k2;
long d1,d2,aux;
d1=d2=0;
for (i=0;i<n;i++)
if (-l[i].p-l[i].n>d1) {d1=-l[i].p-l[i].n;
k1=i;}
for (j=0;j<m;j++)
if (-c[j].p-c[j].n>d2) {d2=-c[j].p-c[j].n;
k2=j;}
if (d1>=d2&&d1>0)
{
l[k1].p=-l[k1].p;l[k1].n=-l[k1].n;
aux=l[k1].p;l[k1].p=l[k1].n;l[k1].n=aux;
s+=2*(l[k1].p+l[k1].n);
for (j=0;j<m;j++)
{nr[k1][j]=-nr[k1][j];
c[j].p+=nr[k1][j];
c[j].n+=nr[k1][j];}
calculeaza();
}
else if (d2>d1&&d2>0)
{
c[k2].p=-c[k2].p; c[k2].n=-c[k2].n;
aux=c[k2].p;c[k2].p=c[k2].n;c[k2].n=aux;
s+=2*(c[k2].p+c[k2].n);
for (i=0;i<n;i++)
{nr[i][k2]=-nr[i][k2];
l[i].p+=nr[i][k2];
l[i].n+=nr[i][k2];}
calculeaza();
}
}
void afisare()
{
fprintf(fout,"%ld\n",s);
fclose(fout);
}
int main()
{
s=0;
citire();
calculeaza();
afisare();
return 0;
}