Cod sursa(job #2179171)

Utilizator NoImaginationForNameNo Imagination For Name NoImaginationForName Data 19 martie 2018 23:25:20
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.79 kb
#include <stdio.h>
using namespace std;

int n, m, a[20][20];

void read()
{
    freopen("flip.in", "r", stdin);
    scanf("%d %d\n", &n, &m);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            scanf("%d ", &a[i][j]);
}

void commute(int x, int y)
{
    if (x == 1)
        for(int j = 0; j < m; j++)
            a[y][j] *= -1;
    else
        for(int i = 0; i < n; i++)
            a[i][y] *= -1;
}

int sumCheck(int x, int y)
{
    if (a[x][y] == 0)
        return -1;
    int lineSumP = 0;
    int lineSumN = 0;
    for (int j = 0; j < m; j++)
    {
        if (a[x][j] > 0)
            lineSumP += a[x][j];
        else
            lineSumN += a[x][j];
    }
    lineSumN *= -1;
    int lineSum;
    bool checkLine;
    if (lineSumN > lineSumP)
    {
        checkLine = 1;
        lineSum = lineSumN;
    }
    else
    {
        checkLine = 0;
        lineSum = lineSumP;
    }

    int columnSumP = 0;
    int columnSumN = 0;
    for (int i = 0; i < n; i++)
    {
        if (a[i][y] > 0)
            columnSumP += a[i][y];
        else
            columnSumN += a[i][y];
    }
    columnSumN *= -1;
    int columnSum;
    bool checkColumn;
    if (columnSumN > columnSumP)
    {
        checkColumn = 1;
        columnSum = columnSumN;
    }
    else
    {
        checkColumn = 0;
        columnSum = columnSumP;
    }

    if (checkLine == 0 && checkColumn == 0)
        return -2;
    else if (checkLine == 1 && checkColumn == 0)
        return x;
    else if (checkLine == 0 && checkColumn == 1)
        return y;
    else if (columnSum > columnSum)
        return y;
    return x;
}

void sum()
{
    int sum = 0;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            sum += a[i][j];
    freopen("flip.out", "w", stdout);
    printf("%d", sum);
}

int main()
{
    read();
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            int SumCheck = sumCheck(i ,j);
            if (SumCheck == i)
                commute(1, i);
            if (SumCheck == j)
                commute(2, j);
            if (SumCheck == -1)
            {
                commute(1, i);
                commute(2, j);
            }
        }
    }
    sum();
    return 0;
}
















//void commute(int x, int y)
//{
//    if (x == 1)
//    {
//        for(int j = 0; j < m; j++)
//            a[y][j] *= -1;
//    }
//    else
//    {
//        for(int i = 0; i < n; i++)
//            a[i][y] *= -1;
//    }
//}
//
//void sumCheckColumn()
//{
//    int spos = 0;
//    int sneg = 0;
//    for (int j = 0; j < m; j++)
//    {
//        sneg = 0;
//        spos = 0;
//        for (int i = 0; i < m; i++)
//        {
//            if (a[i][j] < 0)
//                sneg += a[i][j];
//            else
//                spos += a[i][j];
//        }
//        sneg *= -1;
//        if(sneg > spos)
//            commute(2, j);
//    }
//}
//
//void sumCheckLine()
//{
//    int spos = 0;
//    int sneg = 0;
//    for (int i = 0; i < n; i++)
//    {
//        sneg = 0;
//        spos = 0;
//        for (int j = 0; j < m; j++)
//        {
//            if (a[i][j] < 0)
//                sneg += a[i][j];
//            else
//                spos += a[i][j];
//        }
//        sneg *= -1;
//        if(sneg > spos)
//            commute(1, i);
//    }
//}
//
//void sum()
//{
//    int sum = 0;
//    for (int i = 0; i < n; i++)
//        for (int j = 0; j < m; j++)
//            sum += a[i][j];
//    freopen("flip.out", "w", stdout);
//    printf("%d", sum);
//}
//
//int main()
//{
//    read();
//    sumCheckColumn();
//    sumCheckLine();
//    sum();
//    return 0;
//}