Cod sursa(job #2710451)

Utilizator Mar3C10canarGreg mister Mar3C10canar Data 22 februarie 2021 16:31:41
Problema Jocul Flip Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.95 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

long n,nr_sol = 1;
short m;
long v[101][101];
int sol[202]= {0};


void bkt_rand(int x,int j)
{
    sol[nr_sol] = 0;
    long v1[101][101];
    for(int i=1; i<=n; i++)
        for(int a=1; a<=m; a++)
            v1[i][a] = v[i][a];

    for(int i=1; i<=m; i++)
    {
        v1[x][i]*=-1;
        sol[nr_sol]+=v1[x][i];
    }
    for(int i=1; i<=n; i++)
    {
        int suma=0;
        if(i!=x)
            for(int h=1; h<=m; h++)
                suma+= v[i][h];
        if(suma<0)
            for(int h=1; h<=m; h++)
            {
                v1[i][h]*=-1;
                sol[nr_sol]+= v1[i][h];
            }
        else
            for(int h=1; h<=m; h++)
                sol[nr_sol]+= v1[i][h];
        if(i==n)
        {
            nr_sol++;
            sol[nr_sol] = 0;
            for(int k=1; k<=m; k++)
                for(int s=1; s<=n; s++)
                    if(k==j)
                        sol[nr_sol]+= v1[s][k]*-1;
                    else
                        sol[nr_sol]+=v1[s][k];
        }
    }
    if(j==m)
    {
        nr_sol++;
        sol[nr_sol]=0;
        for(int k=1; k<=m; k++)
            for(int z=1; z<=n; z++)
                sol[nr_sol] += v1[z][k]*-1;
    }
    nr_sol++;
}
void bkt_linii(int x,int j)
{
    sol[nr_sol] = 0;
    long v1[101][101];
    for(int i=1; i<=n; i++)
        for(int a=1; a<=m; a++)
            v1[i][a] = v[i][a];

    for(int i=1; i<=n; i++)
    {
        v1[x][i]*=-1;
        sol[nr_sol]+=v1[x][i];
    }
    for(int i=1; i<=m; i++)
    {
        int suma=0;
        if(i!=x)
            for(int h=1; h<=n; h++)
                suma+= v[i][h];
        if(suma<0)
            for(int h=1; h<=n; h++)
            {
                v[i][h]*=-1;
                sol[nr_sol]+= v1[i][h];
            }
        else
            for(int h=1; h<=n; h++)
                sol[nr_sol]+= v1[i][h];
        if(i==m)
        {
            nr_sol++;
            sol[nr_sol] = 0;
            for(int k=1; k<=n; k++)
                for(int s=1; s<=m; s++)
                    if(k==j)
                        sol[nr_sol]+= v1[s][k]*-1;
                    else
                        sol[nr_sol]+=v1[s][k];
        }
    }
    if(j==m)
    {
        nr_sol++;
        sol[nr_sol]=0;
        for(int k=1; k<=n; k++)
            for(int z=1; z<=m; z++)
                sol[nr_sol] += v1[k][z]*-1;
    }
    nr_sol++;
}

int main()
{
    ifstream in("flip.in");
    ofstream out("flip.out");
    in >> n >> m;
    for(long i=1; i<=n; i++)
        for(short j=1; j<=m; j++)
            in >> v[i][j];
    for(int i =1; i<=n; i++)
        for(int j =1; j<=m; j++)
            bkt_rand(i,j);
    for(int i=1; i<=m; i++)
        for(int l=1; l<=n; l++)
            bkt_linii(i,l);
    sort(sol,sol+nr_sol);
    out << sol[nr_sol-1];
    return 0;
}