Cod sursa(job #856446)

Utilizator SPDionisSpinei Dionis SPDionis Data 16 ianuarie 2013 15:22:39
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <stdio.h>
#include <conio.h>

int n,m,a[16][16],si[16],sj[16];

void afissum()  //afiseaza sumele
{
    int i,j;
        printf("si: ");
    for (i=0; i<n; i++)
        printf("%i   ",si[i]);
    printf("\nsj: ");
    for (j=0; j<m; j++)
        printf("%i   ",sj[j]);
}

void rind(int i)
{
    int j;
    for (j=0; j<m; j++)
        a[i][j]=-a[i][j];
    si[i]=-si[i];
    for (j=0; j<m; j++)
        sj[j]=sj[j]+2*a[i][j];
}

void coloana(int j)
{
    int i;
    for (i=0; i<n; i++)
        a[i][j]=-a[i][j];
    sj[j]=-sj[j];
    for (i=0; i<n; i++)
        si[i]=si[i]+2*a[i][j];
}

int main()
{
    FILE *f; int i,j,k,stot=0;

//
    f=fopen("flip.in","r");
    fscanf(f,"%i%i",&n,&m);
    for (i=0; i<n; i++)
        for (j=0; j<m; j++)
        fscanf(f,"%i",&a[i][j]);
    fclose(f);
// end cit


//vectorii cu sume
    for (i=0; i<n; i++)
    {
        si[i]=0;
        for (j=0; j<m; j++)
        si[i]=si[i]+a[i][j];
    }

    for (j=0; j<m; j++)
    {
        sj[j]=0;
        for (i=0; i<n; i++)
        sj[j]=sj[j]+a[i][j];
    }
// end sume


    do
    {
        k=0;
        for (i=0; i<n; i++)
        if (si[i]<0) { rind(i); k=1; }
        for (j=0; j<m; j++)
        if (sj[j]<0) { coloana(j); k=1; }
    }
    while (k);

    afissum();

    for (i=0; i<n; i++)
        for (j=0; j<m; j++)
        stot=stot+a[i][j];
    f=fopen("flip.out","w");
    fprintf(f,"%i",stot);
    fclose(f);
    getch();
    return 0;
}