Submission #1178746

#TimeUsernameProblemLanguageResultExecution timeMemory
1178746ollelOlympiads (BOI19_olympiads)C++20
100 / 100
1973 ms207420 KiB
#pragma GCC optimize ("03") #include <bitset> #pragma GCC target ("avx2") using namespace std; #include <bits/stdc++.h> #define rep(i,a,b) for (int i = a; i < b; i++) #define pb push_back typedef vector<int> vi; typedef long long ll; int n, c, k; vector<vector<int>> mat; set<ll> visited; priority_queue<pair<int,ll>> pq; mt19937 rng(6215); int rand(int maxr) { return uniform_int_distribution<int>(0, maxr)(rng); } void solve() { cin >> n >> k >> c; mat.resize(n); rep(i,0,n) { mat[i].resize(k); rep(j,0,k) cin >> mat[i][j]; } auto id2inds = [](ll id) { vector<int> inds; rep(j,0,k) { inds.push_back(id % n); id /= n; } return inds; }; auto inds2id = [](vector<int> & inds) { sort(inds.begin(), inds.end()); ll id = 0; rep(j,0,k) { id *= n; id += inds[j]; } return id; }; auto eval = [&](vector<int> & inds) { vector<int> res(k, 0); for (auto i : inds) rep(j,0,k) res[j] = max(res[j], mat[i][j]); int sum = 0; rep(j,0,k) sum += res[j]; return sum; }; vector<bool> in_best(n, false); vector<int> best; rep(j,0,k) { int I = -1; rep(i,0,n) { if (in_best[i]) continue; if (I == -1 || mat[i][j] > mat[I][j]) I = i; } in_best[I] = true; best.push_back(I); } pq.push({eval(best), inds2id(best)}); visited.insert(inds2id(best)); int iter = 1; int ans = 0; while (iter <= c && (!pq.empty())) { vector<int> cur; ll cid; tie(ans, cid) = pq.top(); pq.pop(); iter++; cur = id2inds(cid); in_best.assign(n, false); for (auto i : cur) in_best[i] = true; rep(j,0,k) rep(i,0,n) { if (in_best[i]) continue; vector<int> here; rep(j2,0,k) if (j2 != j) here.push_back(cur[j2]); here.push_back(i); ll id = inds2id(here); if (visited.find(id) != visited.end()) continue; int score = eval(here); pq.push({score, id}); visited.insert(id); } } cout << ans << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...