Cod sursa(job #1267533)
| Utilizator | Data | 19 noiembrie 2014 23:54:20 | |
|---|---|---|---|
| Problema | Jocul Flip | Scor | 40 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 2.16 kb |
#include <stdio.h>
FILE *fin, *fout;
int m, n, sum, max;
unsigned long int c, temp, pwr[32];
bool *v;
int main()
{
fin = fopen("flip.in", "r");
fout = fopen("flip.out", "w");
pwr[0] = 1;
for(int i =1; i< 32; i++) pwr[i] = pwr[i-1]*2;
fscanf(fin, "%d%d", &m, &n);
v = new bool[m+n];
int arr1[m][n], arr2[m][n];
for(int i= 0; i< m; i++)
{
for(int j =0; j< n; j++)
{
fscanf(fin, "%d", &arr1[i][j]);
}
}
max = -999999999;
for(c = 0;c<pwr[m+n]; c++)
{
for(int i = 0; i< m+n; i++) v[i] = 0;
for(int i = 0; i< m; i++)
for(int j= 0; j< n; j++)
arr2[i][j] = arr1[i][j];
temp = c;sum = 0;
for(int i =0; temp; i++)
{
v[m+n-i] = temp%2;
temp = temp/2;
}
for(int i = 0; i< m+n; i++)
{
if(i<n)
{
if(!v[i]) continue;
for(int j = 0; j< m; j++)
{
arr2[j][i]*=-1;
}
}
else
{
if(!v[i])continue;
for(int j = 0; j< n; j++)
{
arr2[i-n][j]*=-1;
}
}
}
for(int i =0; i< m; i++)
for(int j =0; j< n; j++)
sum+=arr2[i][j];
if(sum > max) max = sum;
}
fprintf(fout, "%d", max);
fclose(fin);
fclose(fout);
return 0;
}
