Cod sursa(job #2709797)

Utilizator Mar3C10canarGreg mister Mar3C10canar Data 21 februarie 2021 12:08:56
Problema Jocul Flip Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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



void bkt_linii(int x)
{
    long v1[101][101];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            v1[i][j] = v[i][j];

    for(int i=x; i<=m; i++)
    {
        sol[nr_sol] = 0;
        //comut actuala linie
        for(int k=1; k<=n; k++)
                v1[k][i]*=-1;
        // comut umratoarea linie
        if(i==x)
            bkt_linii(x+1);

        // fac solutia
        for(int d=1;d<=n;d++)
            for(int k=1;k<=m;k++)
                sol[nr_sol]+= v1[d][k];
        nr_sol++;
    }
}
void bkt_rand(int x)
{
    long v1[101][101];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            v1[i][j] = v[i][j];

    for(int i=x; i<=n; i++)
    {
        sol[nr_sol] = 0;
        //comut actualul rand
        for(int k=1; k<=m; k++)
                v1[i][k]*=-1;
        // comut umratorul rand
        if(i==x)
            bkt_rand(x+1);

        // fac solutia
        for(int d=1;d<=n;d++)
            for(int k=1;k<=m;k++)
                sol[nr_sol]+= v1[d][k];
        nr_sol++;

        for(int a=1;a<=x;a++){
            for(int h=1;h<=m;h++)
                for(int t=1;t<=n;t++)
                    if(h==a)
                        sol[nr_sol]+= v1[t][h]*-1;
                    else
                        sol[nr_sol]+= v1[t][h];
            nr_sol++;
        }
        for(int h=1;h<=m;h++)
            for(int t=1;t<=n;t++)
                sol[nr_sol]+= v[t][h]*-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];
        bkt_rand(1);
        bkt_linii(1);
        sort(sol,sol+nr_sol);
        out << sol[nr_sol-1];
        return 0;
    }