Cod sursa(job #763815)

Utilizator lucifix.nLucian Dumitru lucifix.n Data 3 iulie 2012 11:11:13
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <stdio.h>

FILE *fi,*fo;
int n,m;
long int a[17][17];

void read ()
{int i,j;
    fi=fopen("flip.in","r");
            fscanf(fi,"%d",&n);
    fscanf(fi,"%d",&m);

   for(i=1; i<=n;i++)
        for(j=1; j<=m;j++)
            fscanf(fi,"%ld",&a[i][j]);

}

void sumaf()
{int i,j;
    long int sum=0;

    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            sum+=a[i][j];

    fo=fopen("flip.out","w");
    fprintf(fo,"%ld\n",sum);

}
int sumline(int l)
{
    int j;
    long int s=0;

    for(j=1; j<=m; j++)
        s+=a[l][j];

     if (s>=0) return 1;
            else return 0;


}

int sumcol(int c)
{
    int i;
    long int s=0;

    for(i=1; i<=m; i++)
        s+=a[i][c];

     if (s>=0) return 1;
            else return 0;


}

void changeline (int i)
{
    int j;

    for(j=1; j<=m; j++)
        a[i][j]*=-1;
}

void changecol(int j)
{
    int i;

    for(i=1; i<=n; i++)
        a[i][j]*=-1;
}

int check()
{int i,j;

    for(i=1; i<=n; i++)
        if(sumline(i)==0)
            return 0;

    for(j=1; j<=m; j++)
        if(sumcol(j)==0)
            return 0;


     return 1;

}

int main()
{
    int i,j,k=0;

    read();

    while(k==0)
    {
        if(check()==1) {sumaf(); k=1;}
            else {if(n<=m)
                        {
                            for(i=1;i<=n;i++)
                                if(sumline(i)==0)
                                    changeline(i);

                            for(j=1; j<=m;j++)
                                if(sumcol(j)==0)
                                    changecol(j);
                        }
                    else {for(j=1; j<=m;j++)
                                if(sumcol(j)==0)
                                    changecol(j);

                          for(i=1;i<=n;i++)
                                if(sumline(i)==0)
                                    changeline(i);

                    }
                    }
    }

    return 0;
}