Submission #1086965

#TimeUsernameProblemLanguageResultExecution timeMemory
1086965daoquanglinh2007Council (JOI23_council)C++17
6 / 100
457 ms205680 KiB
#include <bits/stdc++.h> using namespace std; const int NM = 3e5, MM = 20; int N, M, msk[NM+5], occ[(1<<MM)+5], cnt[MM+5]; int f[(1<<MM)+5][MM+5], g[(1<<MM)+5][MM+5]; void optimize(int i, int j, int x){ if (f[i][j] == -1 || __builtin_popcount(x&i) < __builtin_popcount(f[i][j]&i)){ g[i][j] = f[i][j]; f[i][j] = x; return; } if (x == f[i][j]) return; if (g[i][j] == -1 || __builtin_popcount(x&i) < __builtin_popcount(g[i][j]&i)){ g[i][j] = x; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> M; for (int i = 1; i <= N; i++){ for (int j = 0; j < M; j++){ char ch; cin >> ch; if (ch == '1'){ msk[i] += 1<<j; cnt[j]++; } } occ[msk[i]]++; } for (int i = 0; i < (1<<M); i++){ f[i][0] = (occ[i] > 0 ? i : -1); g[i][0] = -1; } for (int i = 0; i < (1<<M); i++) for (int j = 0; j < M; j++){ f[i][j+1] = f[i][j]; g[i][j+1] = g[i][j]; if (((i>>j)&1) == 1){ optimize(i, j+1, f[i-(1<<j)][j]); optimize(i, j+1, g[i-(1<<j)][j]); } } for (int i = (1<<M)-1; i >= 0; i--){ f[i][0] = f[i][M]; g[i][0] = g[i][M]; for (int j = 0; j < M; j++){ f[i][j+1] = f[i][j]; g[i][j+1] = g[i][j]; if (((i>>j)&1) == 0){ optimize(i, j+1, f[i+(1<<j)][j]); optimize(i, j+1, g[i+(1<<j)][j]); } } } for (int i = 1; i <= N; i++){ int tmp = 0, res = 0; for (int j = 0; j < M; j++){ if (cnt[j]-((msk[i]>>j)&1) >= N/2) res++; if (cnt[j]-((msk[i]>>j)&1) == N/2) tmp += (1<<j); } if (f[tmp][M] == msk[i] && occ[msk[i]] == 1) res -= __builtin_popcount(g[tmp][M]&tmp); else res -= __builtin_popcount(f[tmp][M]&tmp); cout << res << '\n'; } return 0; }
#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...