#include <vector>
#include <iostream>
using namespace std;
class Solution {
public:
int matrixScore(vector<vector<int>>& A)
{
int xlen = A.size();
int ylen = A[0].size();
//将每一行的第一个值转换为1
for (int i = 0; i < ylen; i++)
{
trans(A, xlen, i);
//print_nums(A);
//cout << endl;
}
int sum = 0;
for (int i = 0; i < xlen; i++)
{
int he = 0;
for (int j = 0; j < ylen; j++)
{
//cout << A[i][ylen - j - 1] << endl;
int te = A[i][ylen - j - 1] * pow(2, j);
he += te;
}
sum += he;
}
//cout << sum << endl;
return sum;
}
void trans(vector<vector<int>>&num,int xlen,int y)
{
vector<vector<int>> temp = num;
vector<int>num_0, num_1;
for (int i = 0; i < xlen; i++)
{
if (temp[i][y] == 0)
num_0.push_back(i);
else
num_1.push_back(i);
}
if (num_1.empty())
for (int i = 0; i < xlen; i++)
{
temp[i][y] = 1;
}
else if (y==0)
{
for (int i = 0; i < num_0.size(); i++)
{
for (int j = 0; j < temp[i].size(); j++)
{
if (temp[num_0[i]][j] == 0)
temp[num_0[i]][j] = 1;
else
temp[num_0[i]][j] = 0;
}
}
}
else
{
if (num_0.size() > num_1.size() )
{
for (int i = 0; i < xlen; i++)
{
if (temp[i][y] == 0)
temp[i][y] = 1;
else
temp[i][y] = 0;
}
}
}
num = temp;
}
/*void print_nums(vector<vector<int>>num)
{
for (int i = 0; i < num.size(); i++)
{
for (int j = 0; j < num[i].size(); j++)
{
cout << num[i][j] << " ";
}
cout << endl;
}
}*/
};
int main()
{
vector<vector<int>> num = {{1, 1}, {0, 0}, {1, 0}, {1, 0}, {1, 1}};
Solution s;
s.matrixScore(num);
return 0;
}