Cod sursa(job #1769863)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 3 octombrie 2016 12:00:35
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <stdio.h>
#include <ctype.h>
#define LIM 1<<17
FILE *fi;
using namespace std;
char BUF[LIM];
int v[16][16], poz=LIM, n, m;
char getch(){
    if(poz==LIM)
        fread(BUF,LIM,1,fi);
    return BUF[poz++];
}

int getNr(){
    char ch=getch();
    while(isdigit(ch)==0 && ch!='-') ch=getch();
    int semn=1, rez=0;
    if(ch=='-'){
        semn=-1;
        ch=getch();
    }
    do{
        rez=rez*10+ch-'0';
        ch=getch();
    }while(isdigit(ch)!=0);
    return rez*semn;
}

int calcul(int urma){
    int i=0, rez=0, sum, j, aux[16][16];
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            aux[i][j]=v[i][j];
    i=0;
    while(urma>0){
        if(urma%2==1)
            for(j=0;j<m;j++)
                aux[i][j]=-aux[i][j];
        urma/=2;
        i++;
    }
    for(j=0;j<m;j++){
        sum=0;
        for(i=0;i<n;i++)
            sum+=aux[i][j];
        if(sum<0)
            rez-=sum;
        else
            rez+=sum;
    }
    return rez;
}

int main()
{
    int i, j, mx, lim, a;
    FILE *fo=fopen("flip.out", "w");
    fi=fopen("flip.in", "r");
    fscanf(fi, "%d%d", &n, &m);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            fscanf(fi, "%d", &v[i][j]);
    lim=1<<n;
    mx=-2000000000;
    for(i=0;i<lim;i++){
        a=calcul(i);
        if(a>mx)
            mx=a;
    }
    fprintf(fo, "%d", mx);
    fclose(fi);
    fclose(fo);
    return 0;
}