Submission #1241934

#TimeUsernameProblemLanguageResultExecution timeMemory
1241934HanksburgerCouncil (JOI23_council)C++20
100 / 100
1025 ms174876 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...