Cod sursa(job #187790)
Utilizator | 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;
}