Submission #1317458

#TimeUsernameProblemLanguageResultExecution timeMemory
1317458vedchoudharyTopical (NOI23_topical)C++20
100 / 100
582 ms134344 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")

using namespace std;

using ll = long long;
#define int ll

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n,k; cin >> n >> k;
    vector<vector<int>> r(n,vector<int>(k));
    vector<vector<int>> u(n,vector<int>(k));
    for(int i = 0; i < n; i++) for(int j = 0; j < k; j++) cin >> r[i][j];
    for(int i = 0; i < n; i++) for(int j = 0; j < k; j++) cin >> u[i][j];
    vector<int> rem(n,k);
    vector<int> p(k,0);
    vector<priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>> pq(k);
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < k; j++) {
            pq[j].push({r[i][j],i});
        }
    }

    int ans = 0;
    bool cont = true;
    while(cont) {
        cont = false;
        for(int i = 0; i < k; i++) {
            while(!pq[i].empty()&&pq[i].top().first<=p[i]) {
                rem[pq[i].top().second]--;
                // cout << "decresed " << pq[i].top().second << " rem = " << rem[pq[i].top().second] << "\n";
                if(rem[pq[i].top().second]==0) {
                    cont = true;
                    ans++;
                    for(int j = 0; j < k; j++) p[j] += u[pq[i].top().second][j];
                }
                pq[i].pop();
            }
        }
    }

    cout << ans;

    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...