Cod sursa(job #2951835)

Utilizator Alex_DumitrascuAlex Dumitrascu Alex_Dumitrascu Data 7 decembrie 2022 14:41:47
Problema Jocul Flip Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
FILE *fin=fopen("flip.in", "r");
FILE *fout=fopen("flip.out", "w");
int mat[18][18];
int n, m;
struct data
{
    int type;
    int poz;
    int value;
};
vector <data> v;
bool sorted(data a, data b)
{
    return a.value<b.value;
}
int solve()
{
    int s=0;
    v.clear();
    for (int i=1; i<=n; i++) {
        int u=0;
        for (int j=1; j<=m; j++) {
            u+=mat[i][j];
        }
        data d;
        d.poz=i; d.type=1; d.value=u;
        v.push_back(d);
    }
    for (int j=1; j<=m; j++) {
        int u=0;
        for (int i=1; i<=n; i++) {
            u+=mat[i][j];
        }
        data d;
        d.poz=j; d.type=2; d.value=u;
        v.push_back(d);
    }
    sort(v.begin(), v.end(), sorted);
    for (int i=0; i<v.size()&&v[i].value<0; i++) {
        int type=v[i].type;
        if (type==1) {
            int k=v[i].poz;
            for (int j=1; j<=m; j++) mat[k][j]*=-1;
        }
        if (type==2) {
            int j=v[i].poz;
            for (int k=1; k<=n; k++) mat[k][j]*=-1;
        }
    }
    s=0;
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=m; j++) {
            s+=mat[i][j];
        }
    }
    return s;
}
void display()
{
    int s1=solve(), s2=solve();
    while (s1!=s2) {
        s1=s2;
        s2=solve();
    }
    fprintf(fout, "%d", s2);
}
int main()
{
    fscanf(fin, "%d%d", &n, &m);
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=m; j++) {
            fscanf(fin, "%d", &mat[i][j]);
        }
    }
    display();
    return 0;
}