Cod sursa(job #1815173)

Utilizator Coroian_DavidCoroian David Coroian_David Data 24 noiembrie 2016 21:46:13
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul II Marime 2.16 kb
#include <cstdio>

#include <cstring>

using namespace std;

FILE *f, *g;

int n, m, mx, a[17][17], col[17], lin[17], s, bkStk[33], k, b[17][17];

void readFile()
{
    f = fopen("flip.in", "r");

    fscanf(f, "%d%d", &n, &m);

    int i, j;

    for(i = 1; i <= n; i ++)
    {
        for(j = 1; j <= m; j ++)
            fscanf(f, "%d", &a[i][j]), col[j] += a[i][j], lin[i] += a[i][j], s += a[i][j], b[i][j] = a[i][j];
    }

    fclose(f);
}

void calc(int col[])
{
    int i, j;

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


void sol(int n, int lin[], int m, int col[])
{
    int rez = s, i, j;

    for(i = 1; i <= n; i ++)
    {

        if(lin[i] <= 0)
        {
            for(j = 1; j <= m; j ++)
                a[i][j] = -a[i][j], rez += 2 * a[i][j]/*, printf("%d %d %d\n", j,  a[i][j], rez)*/;
        }

           // printf("%d %d %d\n", rez, i ,lin[i]);
    }


   // printf("%d\n", rez);

    int sum;

    for(i = 1; i <= m; i ++)
    {
        sum = 0;

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

        if(sum <= 0)
            rez -= 2 * sum;
    }

    if(rez > mx)
        mx = rez;
}

void sol2(int n, int lin[], int m, int col[])
{
    int rez = s, i, j;

    for(i = 1; i <= m; i ++)
    {

        if(col[i] <= 0)
        {
            for(j = 1; j <= n; j ++)
                b[j][i] = -b[j][i], rez += 2 * b[j][i]/*, printf("%d %d %d\n", j,  b[i][j], rez)*/;
        }

          //  printf("%d %d %d\n", rez, i ,lin[i]);
    }


    //printf("%d\n", rez);

    int sum;

    for(i = 1; i <= n; i ++)
    {
        sum = 0;

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

        if(sum <= 0)
            rez -= 2 * sum;
    }

       // printf("**%d\n", rez);

    if(rez > mx)
        mx = rez;
}

void solve()
{
    int i, j;

    sol(n, lin, m, col);
    sol2(n, lin, m, col);
}

void printFile()
{
    g = fopen("flip.out", "w");

    fprintf(g, "%d\n", mx);

    fclose(g);
}

int main()
{
    readFile();

    solve();

    printFile();

    return 0;
}