using
System;
using
System.Collections.Generic;
class
Program
{
static
void
FlipCol(
int
col, List<List<
int
>> grid)
{
for
(
int
j = 0; j < grid.Count; j++)
{
grid[j][col] ^= 1;
}
}
static
void
FlipRow(
int
row, List<List<
int
>> grid)
{
for
(
int
i = 0; i < grid[0].Count; i++)
{
grid[row][i] ^= 1;
}
}
static
int
MatrixScore(List<List<
int
>> grid)
{
int
n = grid.Count;
int
m = grid[0].Count;
for
(
int
i = 0; i < n; i++)
{
if
(grid[i][0] == 0)
{
FlipRow(i, grid);
}
}
for
(
int
j = 0; j < m; j++)
{
int
zeros = 0;
for
(
int
i = 0; i < n; i++)
{
if
(grid[i][j] == 0)
zeros++;
}
if
(zeros > (n - zeros))
{
FlipCol(j, grid);
}
}
int
sum = 0;
for
(
int
i = 0; i < n; i++)
{
for
(
int
j = 0; j < m; j++)
{
if
(grid[i][j] != 0)
{
sum += (1 << (m - j - 1));
}
}
}
return
sum;
}
static
void
Main(
string
[] args)
{
int
n = 3;
int
m = 4;
List<List<
int
>> grid =
new
List<List<
int
>>
{
new
List<
int
> { 0, 1, 1, 1 },
new
List<
int
> { 1, 0, 0, 0 },
new
List<
int
> { 1, 1, 0, 0 }
};
Console.WriteLine(
"Maximum Value : "
+ MatrixScore(grid));
}
}