Pagini recente » Cod sursa (job #1582701) | Cod sursa (job #3151995) | Cod sursa (job #1933511) | Cod sursa (job #798118) | Cod sursa (job #2331827)
#include <stdio.h>
#include <limits.h>
int N, M, sumMax;
int table[16][16];
unsigned int power(unsigned int base, unsigned int exp)
{
register unsigned int result = 1;
for (;;)
{
if (exp & 1)
result *= base;
exp >>= 1;
if (!exp)
break;
base *= base;
}
return result;
}
inline int computeSum(unsigned int rowsFlip, unsigned int colsFlip)
{
register int i, j, sum = 0, minusOn;
//printf("rowsflip=%x, colsFlip=%x\n", rowsFlip, colsFlip);
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
minusOn = (((rowsFlip >> i) & 0x01) + ((colsFlip >> j) & 0x01)) % 2;
if (minusOn)
{
sum -= table[i][j];
}
else
{
sum += table[i][j];
}
}
}
return sum;
}
void printMatrix(void)
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf("%d ", table[i][j]);
}
printf("\n");
}
printf("printing finished\n");
}
void readInput(void)
{
register int i, j;
FILE * fp;
fp = fopen("flip.in", "r");
if (!fscanf(fp, "%d", &N))
{
fclose(fp);
return;
}
if (!fscanf(fp, "%d", &M))
{
fclose(fp);
return;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
if (!fscanf(fp, "%d", &table[i][j]))
{
fclose(fp);
return;
}
}
}
fclose(fp);
}
inline void iterateThroughSolutions(void)
{
register unsigned int i, j;
register int currentSum = INT_MIN;
unsigned int flipLines, flipCols;
flipLines = 0;
flipCols = 0;
//find bad lines
for (i = 0; i < N; i++)
{
int sum = 0;
for (j = 0; j < M; j++)
{
sum = sum + table[i][j];
}
if (sum < 0)
{
flipLines |= 1 << i;
}
}
//find bad cols
for (j = 0; j < M; j++)
{
int sum = 0;
for (i = 0; i < N; i++)
{
sum = sum + table[i][j];
}
if (sum < 0)
{
flipCols |= 1 << j;
}
}
sumMax = computeSum(flipLines, flipCols);
}
void printOutput(void)
{
FILE * fp;
fp = fopen("flip.out", "w");
fprintf(fp, "%d", sumMax);
fclose(fp);
}
int main(void)
{
sumMax = INT_MIN;
readInput();
iterateThroughSolutions();
printOutput();
return 0;
}