Cod sursa(job #605769)
Utilizator | Data | 1 august 2011 22:25:10 | |
---|---|---|---|
Problema | Jocul Flip | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 4.24 kb |
#include<fstream>
#include<iostream>
using namespace std;
int a[17][17];//initializare
int main()
{
int n,m,i,j,max;
ifstream fin("flip.in");
fin>>n>>m;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
{
fin>>a[i][j];
if(a[i][j]<0)
{
a[i][0]+=a[i][j];
a[0][j]+=a[i][j];//fac sumele pe linie si coloana
}
else
{
a[i][m+1]+=a[i][j];
a[n+1][j]+=a[i][j];//fac sumele pe linie si coloana
}
a[0][0]+=a[i][j];//fac suma totala
}
for(int k=0;k<=n+1;++k)
{
for(int l=0;l<=m+1;++l)
cout<<a[k][l]<<" ";
cout<<endl;
}
cout<<endl;
int gata=0;
max=a[0][0];
while(!gata)
{
gata=1;
for(i=1;i<=n;++i)//pe linie
if(-a[i][0]>a[i][m+1])
{
gata=0;
for(j=1;j<=m;++j)
{
//a[0][0]-=2*a[i][j];//revine la initial si se schimba cum trebuie
//a[i][0]-=a[i][j];
//a[i][m+1]-=a[i][j];
a[0][j]-=a[i][j];//pe coloana
a[n+1][j]-=a[i][j];
a[i][j]=-a[i][j];//fac pasul
/*a[0][0]+=a[i][j];//creste sau scade dupa cum trebuie
if(a[i][j]<0)
{
a[i][0]+=a[i][j];
a[0][j]+=a[i][j];//pe coloana
}
else
{
a[i][m+1]+=a[i][j];
a[n+1][j]+=a[i][j];//pe coloana
}*/
}
a[0][0]-=2*(a[i][0]+a[i][m+1]);//se face o singura data nu de n ori
int aux=a[i][0];
a[i][0]=-a[i][m+1];
a[i][m+1]=-aux;
if(max<a[0][0])max=a[0][0];
for(int k=0;k<=n+1;++k)
{
for(int l=0;l<=m+1;++l)
cout<<a[k][l]<<" ";
cout<<endl;
}
cout<<endl;
}
for(j=1;j<=m;++j)//pe coloana
if(-a[0][j]>a[n+1][j])
{
gata=0;
for(i=1;i<=n;++i)
{
//a[0][0]-=2*a[i][j];
// a[0][j]-=a[i][j];
// a[n+1][j]-=a[i][j];
a[i][0]-=a[i][j];//pe linie
a[i][m+1]-=a[i][j];
a[i][j]=-a[i][j];//fac pasul
//a[0][0]+=a[i][j];//creste sau scade dupa cum trebuie
/*if(a[i][j]<0)
{
a[0][j]+=a[i][j];
a[i][0]+=a[i][j];//pe linie
}
else
{
a[0][j]+=a[i][j];
a[i][m+1]+=a[i][j];//pe linie
}*/
}
a[0][0]-=2*(a[0][j]+a[n+1][j]);//se face o singura data nu de n ori
int aux=a[0][j];
a[0][j]=-a[n+1][j];
a[n+1][j]=-aux;
if(max<a[0][0])max=a[0][0];
for(int k=0;k<=n+1;++k)
{
for(int l=0;l<=m+1;++l)
cout<<a[k][l]<<" ";
cout<<endl;
}
cout<<endl;
}
}
for(i=0;i<=n+1;++i)
{
for(j=0;j<=m+1;++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
FILE *f=fopen("flip.out","w");
fprintf(f,"%d ",max);
return 0;
}