Cod sursa(job #1515919)

Utilizator NuadorDemeter Csaba Nuador Data 2 noiembrie 2015 13:33:10
Problema Jocul Flip Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 2.52 kb
#include <stdio.h>

int t[16][16],t2[16][16];
long long tv[16],tf[16];
int n,m;

void cs(int vi,int fi);

int main(){
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    int i,j,x,y;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++){for(j=0;j<m;j++){
        scanf("%d",&t[i][j]);
        tv[j]+=t[i][j];
        tf[i]+=t[i][j];
    }}
#if(0)
    for(i=0;i<n;i++){for(j=0;j<m;j++){printf("%d ",t[i][j]);}printf("\n");}
    for(i=0;i<m;i++){printf("%d ",tv[i]);}printf("\n");
    for(i=0;i<n;i++){printf("%d ",tf[i]);}printf("\n");
#endif
    int ki=1;
    long long minv,minf,vi,fi;
    while(1){
        minv=16000001;
        minf=16000001;
        for(i=0;i<m;i++){
            if(tv[i]<minv){
                minv=tv[i];
                vi=i;
            }
        }
        for(i=0;i<n;i++){
            if(tf[i]<minf){
                minf=tf[i];
                fi=i;
            }
        }

        if((minv>=0 && minf>=0)){break;}
        //for(i=0;i<m;i++){printf("%d ",tv[i]);}printf("\n");
        //for(i=0;i<n;i++){printf("%d ",tf[i]);}printf("\n");
        if(minv<0 && minf<0){
            cs(vi,fi);
            continue;
        }else if(minv<0 && ((-minv)>minf)){
            cs(vi,fi);
            continue;
        }else if(minf<0 && ((-minf)>minv)){
            cs(vi,fi);
            continue;
        }
        break;
    }
    //for(i=0;i<m;i++){printf("%d ",tv[i]);}printf("\n");
    //for(i=0;i<n;i++){printf("%d ",tf[i]);}printf("\n");
    //for(i=0;i<n;i++){for(j=0;j<m;j++){printf("%d ",t[i][j]);}printf("\n");}
    long long sum=0;
    for(i=0;i<m;i++){
        sum+=tv[i];
    }
    printf("%lld",sum);
    return 0;
}

void cs(int vi,int fi){
    tv[vi]=-tv[vi];
    tf[fi]=-tf[fi];
    int i;
    t2[fi][vi]=!t2[fi][vi];
    for(i=0;i<vi;i++){
        //tv[i]+=-t[fi][i]-t[fi][i];
        //t[fi][i]=-t[fi][i];
        t2[fi][i]=!t2[fi][i];
        tv[i]+=(t[fi][i]+t[fi][i])*(t2[fi][i]*-1);
    }
    for(i=vi+1;i<m;i++){
        //tv[i]+=-t[fi][i]-t[fi][i];
        //t[fi][i]=-t[fi][i];
        t2[fi][i]=!t2[fi][i];
        tv[i]+=(t[fi][i]+t[fi][i])*(t2[fi][i]*-1);
    }
    for(i=0;i<fi;i++){
        //tf[i]+=-t[vi][i]-t[vi][i];
        //t[i][vi]=-t[i][vi];
        t2[i][vi]=!t2[i][vi];
        tf[i]+=(t[i][vi]+t[i][vi])*(t2[i][vi]*-1);
    }
    for(i=fi+1;i<n;i++){
        //tf[i]+=-t[vi][i]-t[vi][i];
        //t[i][vi]=-t[i][vi];
        t2[i][vi]=!t2[i][vi];
        tf[i]+=(t[i][vi]+t[i][vi])*(t2[i][vi]*-1);
    }
}