Pagini recente » Cod sursa (job #2438567) | Cod sursa (job #1161517) | Cod sursa (job #1356073) | Cod sursa (job #2469549) | Cod sursa (job #1702970)
#include <fstream>
using namespace std;
// Build command:
// g++ -std=c++98 -Wall -o flip flip.cpp
int main(int argc, char const *argv[])
{
int n, // numarul de linii
m, // numarul de coloane
**M, // tabla dreptunghiulara
suma = 0; // suma totala
// deschiderea fluxurilor
ifstream input("flip.in");
ofstream output("flip.out");
// citirea dimensiunilor
input >> n;
input >> m;
// alocarea tablei
M = new int*[n];
for(int i = 0; i < n; i++)
M[i] = new int[m];
// citirea tablei
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
input >> M[i][j];
// intai facem flip-uri pe linii
for(int i = 0; i < n; i++)
{
int pos_sum = 0,
neg_sum = 0;
for(int j = 0; j < m; j++)
if (M[i][j] > 0)
pos_sum += M[i][j];
else
neg_sum -= M[i][j];
if (neg_sum > pos_sum) // flip it
for(int j = 0; j < m; j++)
M[i][j] = -M[i][j];
}
// apoi facem flip-uri pe coloane
for(int j = 0; j < m; j++)
{
int pos_sum = 0,
neg_sum = 0;
for(int i = 0; i < n; i++)
if (M[i][j] > 0)
pos_sum += M[i][j];
else
neg_sum -= M[i][j];
if (neg_sum > pos_sum) // flip it
for(int i = 0; i < n; i++)
M[i][j] = -M[i][j];
}
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
suma += M[i][j];
// scriere in fisierul de iesire rezultatul final
output << suma;
// dealocarea tablei
for(int i = 0; i < n; i++)
delete[] M[i];
delete[] M;
// inchiderea fluxurilor
input.close();
output.close();
return 0;
}