Pagini recente » Monitorul de evaluare | Cod sursa (job #1037944) | Cod sursa (job #2922388) | Cod sursa (job #2169142) | Cod sursa (job #2951835)
#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;
}