Submission #1326291

#TimeUsernameProblemLanguageResultExecution timeMemory
1326291BolatuluTopical (NOI23_topical)C++20
40 / 100
1099 ms82380 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

#define all(x) (x).begin(), (x).end()
// #define int ll

const int maxn = 1e6 + 7;

int n, k, cnt[maxn], p[maxn];
ll c[maxn];
vector<pair<int, int>> v[maxn];

void solve() {
    cin >> n >> k;
    int r[n + 1][k + 1], u[n + 1][k + 1];
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= k; j++) cin >> r[i][j];
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= k; j++) cin >> u[i][j];
    }

    for (int i = 1; i <= k; i++) {
        for (int j = 1; j <= n; j++) v[i].emplace_back(r[j][i], j);
        sort(all(v[i]));
    }

    set<pair<int, int>> s;
    for (int i = 1; i <= n; i++) s.insert({0, i});

    int ans = 0;
    while (!s.empty()) {
        for (int i = 1; i <= k; i++) {
            while (p[i] < n && v[i][p[i]].first <= c[i]) {
                int x = v[i][p[i]].second;
                s.erase({cnt[x], x});
                cnt[x]++;
                s.insert({cnt[x], x});
                p[i]++;
            }
        }

        if (s.rbegin()->first < k) break;

        ans++;
        int x = s.rbegin()->second;
        for (int i = 1; i <= k; i++) {
            c[i] += u[x][i];
        }
        s.erase({cnt[x], x});
    }

    cout << ans;
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int test = 1;
    // cin >> test;
    while (test--) {
        solve();
        // cout << '\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...