Pagini recente » Cod sursa (job #76140) | Cod sursa (job #216252) | Cod sursa (job #2608741) | Cod sursa (job #2107818) | Cod sursa (job #356210)
Cod sursa(job #356210)
/*Gigel a descoperit un nou joc pe care l-a numit "Flip". Acesta se joaca
pe o tabla dreptunghiulara de dimensiuni N*M care contine numere intregi.
Fiecare linie si fiecare coloana are un comutator care schimba starea tuturor
elementelor de pe acea linie sau coloana, inmultindu-le cu -1. Scopul jocului
este ca pentru o configuratie data a tablei de joc sa se actioneze asupra
liniilor si coloanelor astfel incat sa se obtina o tabla cu suma elementelor
cat mai mare.*/
#include<fstream.h>
ifstream f("flip.in");
ofstream g("flip.out");
struct mtr {char c;
int p;
int v;};
int main()
{
long int t[17][17], n, m, i, j, k=0, s=0, I, c, v;
mtr rez;
f>>m>>n;
for(i=0;i<m;i++)
{
s=0;
for(j=0;j<n;j++)
{
f>>t[i][j];
s=s+t[i][j];
}
t[i][n]=s;
}
for(j=0;j<n;j++)
{
s=0;
for(i=0;i<m;i++)
{
s=s+t[i][j];
}
t[m][j]=s;
}
while(!k)
{
rez.v=1000000;
for(i=0;i<m;i++)
if(rez.v>=t[i][n]) {rez.v=t[i][n];
rez.c='l';
rez.p=i;}
for(i=0;i<n;i++)
if(rez.v>=t[m][i]) {rez.v=t[m][i];
rez.c='c';
rez.p=i;}
v=rez.v;
if (v>=0) k=1;
else {rez.v=1000000;
for(i=0;i<m;i++)
if(rez.v>=t[i][n]) {rez.v=t[i][n];
rez.c='l';
rez.p=i;}
for(i=0;i<n;i++)
if(rez.v>=t[m][i]) {rez.v=t[m][i];
rez.c='c';
rez.p=i;}
I=rez.p;
c=rez.c;
if(c=='l') {
for(i=0;i<n;i++)
{t[I][i]=t[I][i]*(-1);
t[m][i]=t[m][i]+2*t[I][i];}
t[I][n]=t[I][n]*(-1);
}
else { for(i=0;i<m;i++)
{t[i][I]=t[i][I]*(-1);
t[i][n]=t[i][n]+2*t[i][I];}
t[m][I]=t[m][I]*(-1);
}
}
}
s=0;
for(i=0;i<n;i++)
s=s+t[m][i];
g<<s;
f.close();
g.close();
}