Submission #1086915

#TimeUsernameProblemLanguageResultExecution timeMemory
1086915daoquanglinh2007Council (JOI23_council)C++17
6 / 100
224 ms8540 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], g[(1<<MM)+5]; void optimize(int i, int x){ if (f[i] == -1 || __builtin_popcount(x&i) < __builtin_popcount(f[i]&i)){ g[i] = f[i]; f[i] = x; return; } if (x == f[i]) return; if (g[i] == -1 || __builtin_popcount(x&i) < __builtin_popcount(g[i]&i)){ g[i] = 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] = (occ[i] > 0 ? i : -1); g[i] = -1; } for (int j = 0; j < M; j++) for (int i = 0; i < (1<<M); i++) if ((i>>j)&1){ if (f[i-(1<<j)] != -1) optimize(i, f[i-(1<<j)]); if (g[i-(1<<j)] != -1) optimize(i, g[i-(1<<j)]); } for (int i = (1<<M)-1; i >= 0; i--) for (int j = 0; j < M; j++) if (((i>>j)&1) == 0){ optimize(i, f[i+(1<<j)]); optimize(i, g[i+(1<<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] == msk[i] && occ[msk[i]] == 1) res -= __builtin_popcount(g[tmp]&tmp); else res -= __builtin_popcount(f[tmp]&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...