Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using ll = long long;
- int main() {
- int a, b;
- cin >> a >> b;
- vector<vector<int>> c(a, vector<int>(b));
- for (int i = 0; i < a; ++i) {
- for (int j = 0; j < b; ++j) {
- cin >> c[i][j];
- }
- }
- int d;
- cin >> d;
- unordered_set<int> e;
- for (int j = 0; j < b; ++j) {
- vector<pair<int, int>> f;
- for (int i = 0; i < a; ++i) {
- f.emplace_back(c[i][j], i);
- }
- sort(f.begin(), f.end(), [](const pair<int, int> &g, const pair<int, int> &h) {
- return g.first > h.first;
- });
- for (int i = 0; i < 2 && i < static_cast<int>(f.size()); ++i) {
- e.insert(f[i].second);
- }
- }
- vector<int> f(e.begin(), e.end());
- ll g = 0;
- for (size_t i = 0; i < f.size(); ++i) {
- for (size_t j = i; j < f.size(); ++j) {
- int h = f[i], k = f[j];
- vector<int> l(b);
- for (int t = 0; t < b; ++t) {
- l[t] = max(c[h][t], c[k][t]);
- }
- ll m = 0, n = 1e18, o = 0;
- while (m <= n) {
- ll p = (m + n) / 2, q = 0;
- bool r = true;
- for (int t = 0; t < b; ++t) {
- ll s = (p + l[t] - 1) / l[t];
- q += s;
- if (q > d) {
- r = false;
- break;
- }
- }
- if (r) {
- o = p;
- m = p + 1;
- } else {
- n = p - 1;
- }
- }
- g = max(g, o);
- }
- }
- cout << g << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement