Submission #1356030

#TimeUsernameProblemLanguageResultExecution timeMemory
1356030dprtoTopical (NOI23_topical)C++20
61 / 100
1097 ms235396 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int long long
#define F(i, l, r) for(int i = l; i <= r; ++i)
#define E(i, l, r) for(int i = l; i >= r; --i)
#define eb emplace_back
const ll mod = 1e9 + 7;
const int ars = 2e5 + 5;
const int ii = 1e9;
const ll il = 1e18;

int n, k;
void solve() {
    cin >> n >> k;
    vector<vector<int>> r(n + 5), u(n + 5);
    F(i, 1, n) r[i].resize(k + 5), u[i].resize(k + 5);
    vector<int> p(k + 5, 0);
    vector<bool> used(n + 5, 0);

    F(i, 1, n) F(j, 1, k) cin >> r[i][j];
    F(i, 1, n) F(j, 1, k) cin >> u[i][j];

    if(k == 1) {
        multiset<pair<int, int>> s;
        F(i, 1, n) s.insert({r[i][1], u[i][1]});
        int p = 0, res = 0;
        for(auto [u, v] : s) {
            if(p >= u) {
                ++res;
                p += v;
            }
        }
        cout << res;
        exit(0);
    }

    bool foundlast = 1;
    while(foundlast) {
        foundlast = 0;
        F(i, 1, n) {
            if(used[i]) continue;
            bool okthis = 1;
            F(j, 1, k) {
                if(r[i][j] > p[j]) {
                    okthis = 0; break;
                }
            }
            if(!okthis) continue;
            else {
                F(j, 1, k) {
                    p[j] += u[i][j];
                }
                used[i] = 1;
                foundlast = 1;
            }
        }
    }
    int res = 0;
    F(i, 1, n) if(used[i]) ++res;
    cout << res;
}

signed main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int t = 1;
    // cin >> t;
    while(t--) solve();

    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...