Submission #1364615

#TimeUsernameProblemLanguageResultExecution timeMemory
1364615njoopTopical (NOI23_topical)C++20
40 / 100
1095 ms32104 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int n, k, ans=0;
    cin >> n >> k;
    vector<pair<vector<int>, vector<int>>> modreq;
    set<int> s;
    vector<int> stat(n+2, 0), cur(k+2, 0);
    for(int i=0; i<n; i++) {
        vector<int> v;
        s.insert(i);
        for(int j=1; j<=k; j++) {
            int in;
            cin >> in;
            v.push_back(in);
        }
        modreq.push_back({v, {}});
    }
    for(int i=0; i<n; i++) {
        vector<int> v;
        for(int j=1; j<=k; j++) {
            int in;
            cin >> in;
            v.push_back(in);
        }
        modreq[i].second = v;
    }
    queue<int> ord;
    for(int i=0; i<n; i++) {
        while(stat[i] < k && cur[stat[i]] >= modreq[i].first[stat[i]]) {
            stat[i]++;
        }
        if(stat[i] == k) {
            ord.push(i);
            ans++;
            s.erase(i);
        }
    }
    while(!ord.empty()) {
        int cn = ord.front();
        ord.pop();
        for(int i=0; i<k; i++) cur[i] += modreq[cn].second[i]; 
        vector<int> v;
        for(auto idx: s) {
            while(stat[idx] < k && cur[stat[idx]] >= modreq[idx].first[stat[idx]]) {
                stat[idx]++;
            }
            if(stat[idx] == k) {
                ord.push(idx);
                ans++;
                v.push_back(idx);
            }
        }
        for(auto i: v) {
            s.erase(i);
        }
    }
    cout << ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...