#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("unroll-loops")
#include <iostream>
using namespace std;
int vote[300005][25];
int cnt[25];
int arr[300005], val[1<<20], calc[1<<20];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
if(n <= 3000)
{
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
{
cin >> vote[i][j];
cnt[j] += vote[i][j];
}
for(int i = 0; i < n; i++)
{
int ans = 0;
for(int j = 0; j < m; j++)
cnt[j] -= vote[i][j];
for(int j = 0; j < n; j++)
{
if(i == j)
continue;
int cur = 0;
for(int k = 0; k < m; k++)
{
cnt[k] -= vote[j][k];
if(cnt[k] >= n/2)
cur++;
}
ans = max(ans, cur);
for(int k = 0; k < m; k++)
cnt[k] += vote[j][k];
}
cout << ans << '\n';
for(int j = 0; j < m; j++)
cnt[j] += vote[i][j];
}
}
else if(m <= 14)
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
int x;
cin >> x;
if(x == 1)
{
arr[i] |= (1<<j);
cnt[j]++;
}
}
val[arr[i]]++;
}
for(int i = 0; i < (1<<m); i++)
{
if(val[i] == 0)
continue;
val[i]--;
for(int j = 0; j < (1<<m); j++)
{
int cur = 0;
if(val[j] == 0)
continue;
for(int k = 0; k < m; k++)
if(cnt[k]-((i & (1<<k)) > 0)-((j & (1<<k))> 0) >= n/2)
cur++;
calc[i] = max(calc[i], cur);
}
val[i]++;
}
for(int i = 0; i < n; i++)
cout << calc[arr[i]] << '\n';
}
else
return 0;
}
# | 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... |