#include <bits/stdc++.h>
using namespace std;
int dp[2][1048576][21], a[300000], sum[20], n, m;
int add(int x, int y)
{
if (!x)
return y;
if (!y)
return x;
return -1;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
int x;
cin >> x;
a[i]|=x<<j;
sum[j]+=x;
}
dp[1][a[i]][0]=add(dp[1][a[i]][0], i+1);
}
for (int i=0; i<m; i++)
{
for (int j=0; j<(1<<m); j++)
{
for (int k=0; k<=m; k++)
{
if (j&(1<<i))
dp[i&1][j][k]=add(dp[(i&1)^1][j][k], dp[(i&1)^1][j^(1<<i)][k]);
else
dp[i&1][j][k]=add(k?dp[(i&1)^1][j][k-1]:0, dp[(i&1)^1][j^(1<<i)][k]);
}
}
}
for (int i=0; i<n; i++)
{
int x=0, ans=0;
for (int j=0; j<m; j++)
{
int diff=sum[j]-((a[i]>>j)&1);
if (diff>n/2)
ans++;
if (diff!=n/2)
x|=1<<j;
}
for (int j=m; j>=0; j--)
{
if (dp[(m&1)^1][x][j] && dp[(m&1)^1][x][j]!=i+1)
{
cout << ans+j << '\n';
break;
}
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |