Pagini recente » Monitorul de evaluare | Istoria paginii calibrare-limite-de-timp | Cod sursa (job #1023618) | Cod sursa (job #1753122) | Cod sursa (job #2331785)
#include <stdio.h>
#include <limits.h>
int N, M, sumMax, currentSum;
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;
for (i = 0; i < power(2, N - 1); i++)
{
for (j = 0; j < power(2, M); j++)
{
currentSum = computeSum(i,j);
(currentSum > sumMax ? sumMax = currentSum: 1);
/*if (currentSum > sumMax)
{
sumMax = currentSum;
}*/
}
}
}
void printOutput(void)
{
FILE * fp;
fp = fopen("flip.out", "w");
fprintf(fp, "%d", sumMax);
fclose(fp);
}
int main(void)
{
sumMax = INT_MIN;
currentSum = INT_MIN;
readInput();
iterateThroughSolutions();
printOutput();
return 0;
}