Submission #966144

#TimeUsernameProblemLanguageResultExecution timeMemory
966144abczzCouncil (JOI23_council)C++14
6 / 100
577 ms51040 KiB
#include <iostream> #include <array> #include <vector> #define ll long long using namespace std; ll n, m, a, f, mask, cnt[20], A[300000]; vector <ll> V[21]; array <array<ll, 2>, 2> dp[(1LL<<20)]; void add(ll u, array<ll, 2> x) { if (dp[u][0][0] < x[0]) dp[u][1] = dp[u][0], dp[u][0] = x; else if (dp[u][1][0] < x[0] && dp[u][0][1] != x[1]) dp[u][1] = x; } int main() { cin >> n >> m; for (int i=0; i<(1LL<<20); ++i) { dp[i] = {0, -1, 0, -1}; V[__builtin_popcount(i)].push_back(i); } for (int i=0; i<n; ++i) { for (int j=0; j<m; ++j) { cin >> a; cnt[j] += a; A[i] += a<<j; } add(A[i] ^ (((1LL<<m)-1)), {__builtin_popcount(A[i] ^ ((1LL<<m)-1)), i}); } for (int i=20; i>1; --i) { for (auto u : V[i]) { for (int j=0; j<20; ++j) { if (u & (1LL<<j)) { add(u-(1LL<<j), {dp[u][0][0]-1, dp[u][0][1]}); add(u-(1LL<<j), {dp[u][1][0]-1, dp[u][1][1]}); } } } } for (int i=1; i<20; ++i) { for (auto u : V[i]) { for (int j=0; j<20; ++j) { if (!(u & (1LL<<j))) { add(u+(1LL<<j), dp[u][0]); add(u+(1LL<<j), dp[u][1]); } } } } for (int i=0; i<n; ++i) { f = mask = 0; for (int j=0; j<20; ++j) { a = cnt[j]-(bool)(A[i] & (1LL<<j)); if (a > n/2) ++f; else if (a == n/2) mask += (1LL<<j); } if (dp[mask][0][1] != i) f += dp[mask][0][0]; else f += dp[mask][1][0]; cout << f << '\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...