Cod sursa(job #187790)

Utilizator moldo_razvanMoldovan Razvan moldo_razvan Data 5 mai 2008 14:12:18
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.47 kb
#include <stdio.h>   
  
int n, m, s, a[16][16], sum=0;   
  
void cit()   
{   
        int i, j;   
        FILE *f=fopen("flip.in", "r");   
        fscanf(f, "%d %d\n", &n, &m);   
        for (i=0; i<n; i++)   
        {   
                for (j=0; j<m; j++)   
                        fscanf(f, "%d ", &a[i][j]);   
                fscanf(f, "\n");   
        }   
        fclose(f);   
}   
  
void tip()   
{   
        FILE *f=fopen("flip.out", "w");   
        fprintf(f, "%d\n", sum);   
        fclose(f);   
}   
  
void comutare(int in, char op)   
{   
        int i;   
        if (op=='l')   
                for (i=0; i<m; i++) a[in][i]*=-1;   
        if (op=='c')   
                for (i=0; i<n; i++) a[i][in]*=-1;   
}   
  
void flip()   
{   
        int t=1, i, s, j, k, sc=0, v[16], g=0;   
        for (i=0; i<n; i++) t*=2;   
        for (i=0; i<t; i++)   
        {   
                for (j=0; j<n; j++)   
                        if (i&(1<<j)) comutare(j, 'l');   
                g=0;   
                sc=0;   
                for (j=0; j<m; j++)   
                {   
                        s=0;   
                        for (k=0; k<n; k++) s+=a[k][j];   
                        if (s<0)   
                        {   
                                comutare(j, 'c');   
                                v[g++]=j;   
                                sc+=-s;   
                        }   
                        else sc+=s;   
                }   
                for (j=0; j<g; j++) comutare(v[j], 'c');   
                if (sc>sum) sum=sc;   
                for (j=0; j<n; j++)   
                        if (i&(1<<j)) comutare(j, 'l');   
        }   
}   
  
int main()   
{   
        cit();   
        flip();   
        tip();   
        return 0;   
}  
#include <stdio.h>

int n, m, s, a[16][16], sum=0;

void cit()
{
        int i, j;
        FILE *f=fopen("flip.in", "r");
        fscanf(f, "%d %d\n", &n, &m);
        for (i=0; i<n; i++)
        {
                for (j=0; j<m; j++)
                        fscanf(f, "%d ", &a[i][j]);
                fscanf(f, "\n");
        }
        fclose(f);
}

void tip()
{
        FILE *f=fopen("flip.out", "w");
        fprintf(f, "%d\n", sum);
        fclose(f);
}

void comutare(int in, char op)
{
        int i;
        if (op=='l')
                for (i=0; i<m; i++) a[in][i]*=-1;
        if (op=='c')
                for (i=0; i<n; i++) a[i][in]*=-1;
}

void flip()
{
        int t=1, i, s, j, k, sc=0, v[16], g=0;
        for (i=0; i<n; i++) t*=2;
        for (i=0; i<t; i++)
        {
                for (j=0; j<n; j++)
                        if (i&(1<<j)) comutare(j, 'l');
                g=0;
                sc=0;
                for (j=0; j<m; j++)
                {
                        s=0;
                        for (k=0; k<n; k++) s+=a[k][j];
                        if (s<0)
                        {
                                comutare(j, 'c');
                                v[g++]=j;
                                sc+=-s;
                        }
                        else sc+=s;
                }
                for (j=0; j<g; j++) comutare(v[j], 'c');
                if (sc>sum) sum=sc;
                for (j=0; j<n; j++)
                        if (i&(1<<j)) comutare(j, 'l');
        }
}

int main()
{
        cit();
        flip();
        tip();
        return 0;
}