Cod sursa(job #605763)

Utilizator mihaimoldovanMihai Moldovan mihaimoldovan Data 1 august 2011 22:09:35
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.45 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(i=0;i<=n+1;++i)
    {
        for(j=0;j<=m+1;++j)
            cout<<a[i][j]<<" ";
        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
                                    }*/
                           }
                           if(max<a[0][0])max=a[0][0];
                    }
    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
                            }*/
                    }
                    if(max<a[0][0])max=a[0][0];
            }
    }
    /*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;
}