Cod sursa(job #119224)

Utilizator mentment nutzu ment Data 30 decembrie 2007 02:31:46
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <stdio.h>
#include <stdlib.h>

#define MAX 15
#define MAXLEN 1024

#define FLIP_IN    "flip.in"
#define FLIP_OUT   "flip.out"

void afisare_matrice();

int ment[MAX][MAX];          // matricea cul
int n, m;                    // n linii, m coloane

int main(void){
int i, j;
FILE *fp;
char line[MAXLEN];
int inv_l=0;
int inv_c=0;

if ((fp = fopen(FLIP_IN, "r")) == NULL) {
          printf("nu pot deschide %s\n", FLIP_IN);
          exit(1);
          }

// citim N SI M DAAAAAAAAAAAAAAAAAa
fgets(line, MAXLEN, fp);
if(!(sscanf(line, "%d %d", &n, &m) > 0)) {
                  printf("nu gasesc n/m in %s\n", FLIP_IN);
                  exit(1);
                  }



// incepem sa citim matricea NEGRULE W00T!
for(i=0; i<n; i++){
         for(j=0; j<m; j++){
                  int value;
                  if(fscanf(fp, "%d", &value) != 1){
                                break;
                                }
                  ment[i][j] = value;
                  }
}

fclose(fp); // am terminat cu FLIP_IN


int S;
// testam pa linii sumele etc
linii_begin:
            
for(i=0; i<n; i++){
         inv_l=0;
         S=0;
         for(j=0; j<m; j++) S+= ment[i][j];
         
         if(S<0){
                 for(j=0; j<m; j++) ment[i][j] = ~ment[i][j]+1;           
                 inv_l=1;
                 }
         //if(inv_l) break;
         }

// testam pa coloane
for(j=0; j<m; j++){
         inv_c=0;
         S=0;
         for(i=0; i<n; i++) S+= ment[i][j];
         
         if(S<0){
                 for(i=0; i<n; i++) ment[i][j] = ~ment[i][j]+1;              
                 inv_c=1;
                 }
         if(inv_c) break;
         }

if(inv_c) goto linii_begin;

int Suma=0;

for(i=0; i<n; i++){
         for(j=0; j<m; j++){
                   Suma+= ment[i][j];
                   }
         }

if ((fp = fopen(FLIP_OUT, "w")) == NULL) {
          printf("nu pot crea/scrie in %s\n", FLIP_OUT);
          exit(1);
          }
          
fprintf(fp, "%d\n", Suma);          

fclose(fp); // am terminat si cu FLIP_OUT

return 0;   
}