Cod sursa(job #147044)

Utilizator cristiprgPrigoana Cristian cristiprg Data 2 martie 2008 15:32:58
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.92 kb
//jocul flip
#include"fstream"
#include"math.h"
#define dim 18
using namespace std;

void comutare_linie(int i);
void comutare_coloana(int j);

long a[dim][dim];
int n,m;

void citire()
{
    ifstream fin("flip.in");
    fin>>n>>m;
    int i,j;
    for(i=1;i<=m;++i)
       for(j=1;j<=n;++j)
           fin>>a[i][j];
    fin.close();
 }
 
void flip()
{
    long maxpoz,maxneg;
    int i,j,gata=0;  //presupun ca maxpoz > |maxneg|
    
    while(!gata)
    {
      gata=1;  
      for(i=1;i<=m;++i)   //fiecare linie
       {
           maxpoz=maxneg=0;
           for(j=1;j<=n;++j)
             {
               if(a[i][j]>=0)
                   maxpoz+=a[i][j];
               if(a[i][j]<0)
                   maxneg-=a[i][j];
              }
           maxneg=labs(maxneg);
           if(maxpoz<maxneg) //daca ii falsa presupunerea;
                comutare_linie(i),gata=0; 
        }       
       for(j=1;j<=n;++j)  //fiecare coloana 
       {
           maxpoz=maxneg=0;
           for(i=1;i<=m;++i)
              {
                  if(a[i][j]>=0)
                     maxpoz+=a[i][j];
                  if(a[i][j]<0)
                     maxneg-=a[i][j];
               }
            maxneg=labs(maxneg);    
            if(maxpoz<maxneg) 
                comutare_coloana(j),gata=0;
        }
    }     
 }

                                 
                              
                                                                                      
void comutare_linie(int i)
{
    int j;
    for(j=1;j<=n;++j)
       a[i][j]=(-1)*a[i][j];
   }    
           
void comutare_coloana(int j)
{
    int i;
    for(i=1;i<=m;++j)
       a[i][j]=(-1)*a[i][j];
 }                                                                                                    
                                                                                                        
void afisare()
{
    ofstream fout("flip.out");
    int suma=0,i,j;
    for(i=1;i<=m;++i)
       {
           for(j=1;j<=n;++i)
               fout<<a[i][j]<<" ";
           fout<<"\n";
           suma+=a[i][j];
        }
    fout<<"\n"<<suma;
    fout.close();
 }                                                                                                                                             
                                                                                                                                                      
                                                                                                                                                                             
int main()
{
    citire();
    flip();
    afisare();
    return 0;
}