Cod sursa(job #356210)

Utilizator raduadyRadu Ionut-Gabriel raduady Data 13 octombrie 2009 20:25:54
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.29 kb
/*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();


}