제출 #805725

#제출 시각아이디문제언어결과실행 시간메모리
805725someoneCouncil (JOI23_council)C++14
16 / 100
4045 ms8680 KiB
#include <bits/stdc++.h> //#define int long long using namespace std; const int N = 3e5 + 42, M = 20; int n, m, mask[N], occ[N], maxi[1 << M][2]; void print(int val) { for(int i = 0; i < m; i++) cout << ((val & (1 << i)) > 0); cout << '\n'; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i = 0; i < n; i++) mask[i] = (1 << m) - 1; for(int i = 0; i < m; i++) occ[i] = 0; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) { int a; cin >> a; mask[i] -= a * (1 << j); occ[j] += a; } for(int i = 0; i < (1 << m); i++) { maxi[i][0] = M-2; maxi[i][1] = M-1; } /* for(int i = 0; i < n; i++) { if(maxi[mask[i]][0] >= M-2) maxi[mask[i]][0] = i; else maxi[mask[i]][1] = i; } for(int i = (1 << m)-1; i >= 0; i--) { for(int j = 0; j < m; j++) { if((i & (1 << j)) == 0) { if(maxi[i][0] >= M-2) { maxi[i][0] = maxi[i + (1 << j)][0]; maxi[i][1] = maxi[i + (1 << j)][1]; } else { maxi[i][1] = maxi[i + (1 << j)][0]; } } } } for(int i = 1; i < (1 << m); i++) { priority_queue<pair<int, int>> pq; pq.push({__builtin_popcount(i & mask[maxi[i][0]]), maxi[i][0]}); pq.push({__builtin_popcount(i & mask[maxi[i][1]]), maxi[i][1]}); for(int j = 0; j < m; j++) if(i & (1 << j)) { int id = i ^ (1 << j); pq.push({__builtin_popcount(i & mask[maxi[id][0]]), maxi[id][0]}); pq.push({__builtin_popcount(i & mask[maxi[id][1]]), maxi[id][1]}); } maxi[i][0] = pq.top().second; pq.pop(); while(pq.top().second == maxi[i][0]) pq.pop(); maxi[i][1] = pq.top().second; } */ for(int i = 0; i < n; i++) { int bmask = 0, nb = 0; //cout << '\n'; for(int j = 0; j < m; j++) { if((1 << j) & (mask[i] ^ (1 << j))) occ[j]--; //cout << occ[j] << ' '; if(occ[j] == n/2) bmask += (1 << j); if(occ[j] >= n/2) nb++; if((1 << j) & (mask[i] ^ (1 << j))) occ[j]++; } //cout << '\n'; //cout << nb << '\n'; //print(bmask); int ans = 0; for(int j = 0; j < n; j++) if(j != i) ans = max(ans, nb - __builtin_popcount(bmask ^ (bmask & mask[j]))); cout << ans << '\n';/* if(maxi[bmask][0] != i) cout << nb - __builtin_popcount(bmask ^ (bmask & mask[maxi[bmask][0]])) << '\n'; else cout << nb - __builtin_popcount(bmask ^ (bmask & mask[maxi[bmask][1]])) << '\n'; */ } }
#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...