Pagini recente » Cod sursa (job #2544236) | Cod sursa (job #2094475) | tema | tema | Cod sursa (job #2544275)
#include <stdio.h>
#include <stdlib.h>
int suma_maxima(int **tabla,int N,int M){
int i,j,*suma_poz_col,*suma_neg_col,*suma_poz_linii,*suma_neg_linii,suma_max=0;
suma_poz_linii=calloc(N,sizeof(int));
if(!suma_poz_linii)
return 0;
suma_neg_linii=calloc(N,sizeof(int));
if(!suma_neg_linii)
return 0;
suma_poz_col=calloc(M,sizeof(int));
if(!suma_poz_col)
return 0;
suma_neg_col=calloc(M,sizeof(int));
if(!suma_neg_col)
return 0;
if(N>=M){
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(tabla[i][j]<=0){
suma_neg_linii[i]+=tabla[i][j];
}
else{
suma_poz_linii[i]+=tabla[i][j];
}
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(((-1)*suma_neg_linii[i])>suma_poz_linii[i]){
tabla[i][j]=(-1)*tabla[i][j];
}
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(tabla[i][j]<=0){
suma_neg_col[j]+=tabla[i][j];
}
else{
suma_poz_col[j]+=tabla[i][j];
}
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(((-1)*suma_neg_col[j])>suma_poz_col[j]){
tabla[i][j]=(-1)*tabla[i][j];
}
}
}
}
if(N<M){
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(tabla[i][j]<=0){
suma_neg_col[j]+=tabla[i][j];
}
else{
suma_poz_col[j]+=tabla[i][j];
}
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(((-1)*suma_neg_col[j])>suma_poz_col[j]){
tabla[i][j]=(-1)*tabla[i][j];
}
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(tabla[i][j]<=0){
suma_neg_linii[i]+=tabla[i][j];
}
else{
suma_poz_linii[i]+=tabla[i][j];
}
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(((-1)*suma_neg_linii[i])>suma_poz_linii[i]){
tabla[i][j]=(-1)*tabla[i][j];
}
}
}
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
suma_max+=tabla[i][j];
}
}
free(suma_poz_linii);
free(suma_neg_linii);
free(suma_poz_col);
free(suma_neg_col);
return suma_max;
}
int main(){
FILE *input=fopen("flip.in","rt");
if(!input)
return 0;
int N,M,i,**tabla,j;
fscanf(input,"%i %i",&N,&M);
tabla=malloc(N*sizeof(int*));
if(!tabla)
return 0;
for(i=0;i<N;i++){
tabla[i]=malloc(M*sizeof(int));
if(!tabla[i])
return 0;
}
for(i=0;i<N;i++){
for(j=0;j<M;j++){
fscanf(input,"%i",&tabla[i][j]);
}
}
fclose(input);
FILE *output=fopen("flip.out","wt");
if(!output)
return 0;
if(N==1){
if(M==1){
if(tabla[0][0]<0){
fprintf(output,"%i\n",(-1)*tabla[0][0]);
}
else{
fprintf(output,"%i\n",tabla[0][0]);
}
}
else{
int suma_pe_linie=0;
for(i=0;i<M;i++){
if(tabla[0][i]>=0){
suma_pe_linie+=tabla[0][i];
}
else{
suma_pe_linie+=(-1)*tabla[0][i];
}
}
fprintf(output,"%i\n",suma_pe_linie);
}
}
else{
if(M==1){
int suma_pe_coloana=0;
for(i=0;i<N;i++){
if(tabla[i][0]>=0){
suma_pe_coloana+=tabla[i][0];
}
else{
suma_pe_coloana+=(-1)*tabla[i][0];
}
}
fprintf(output,"%i\n",suma_pe_coloana);
}
else{
fprintf(output,"%i\n",suma_maxima(tabla,N,M));
}
}
fclose(output);
for(i=0;i<N;i++){
free(tabla[i]);
}
free(tabla);
return 0;
}