Cod sursa(job #670724)

Utilizator Xavierpana emil Xavier Data 29 ianuarie 2012 21:30:04
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include<iostream>
#include<fstream>
using namespace std;

int main(){
    ifstream ifile;
    ofstream ofile;
    int a,b,i,j,min=-1,poz,ok=1,suma=0,m[20][16],l[36]; // l memoreaza sumele pe linii + coloane(indice a+j)
    ifile.open("flip.in");
    ifile>>a>>b;
    for(i=1; i<=a; i++){
            for(j=1; j<=b; j++){
                    ifile>>m[i][j];
            }
    }
    ifile.close();
    
while(ok){
    for(i=1; i<=a+b; i++) l[i]=0;  //resetam vectorul de sume linie/coloana
    for(i=1; i<=a; i++){
            for(j=1; j<=b; j++){
                    l[i]+=m[i][j];
                    l[a+j]+=m[i][j];  //sumele pe coloana puse in acelasi vector
            }
    }
    //for(i=1; i<=a+b; i++) cout<<l[i]<<" ";
    
    //parcurgem vectorul sumelor si vedem care e minimul, dupa care refacem calculele
    min = l[1];
    poz = 1;
    for(i=2; i<=a+b; i++){
             if(min>l[i]){
                   min = l[i];
                   poz = i;
             }
    }
    //cout<<"min/poz="<<min<<" "<<poz<<endl;
    if(min<0){ //rearanjam
              //calculam ce recalculam: col/linie in functie de indice, poz>a => coloane
              if(poz<=a){//recalculam o linie
                  for(i=1; i<=b; i++) m[poz][i] = -m[poz][i];
              } else { //-"- coloana
                  poz -= a;
                  for(i=1; i<=a; i++) m[i][poz] = -m[i][poz];
              }
    } else ok = 0;
} //exit while

    for(i=1; i<=a; i++) suma += l[i];
//cout<<"suma="<<suma<<endl;
    ofile.open("flip.out");
    ofile<<suma;
    ofile.close();
    //system("PAUSE");
    return 0;   
}