Submission #1328494

#TimeUsernameProblemLanguageResultExecution timeMemory
1328494orgiloogiiTopical (NOI23_topical)C++20
100 / 100
627 ms86512 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ff first
#define ss second
signed main() {
    int n, k;
    cin >> n >> k;
    int r[n][k];
    int u[n][k];
    int p[k] = {0};
    vector <vector <pair <int, int>>> v(k);
    int cnt[n] = {0};
    for (int i = 0;i < n;i++) {
        for (int j = 0;j < k;j++) {
            cin >> r[i][j];
            v[j].push_back({r[i][j], i});
        }
    }
    for (int i = 0;i < n;i++) {
        for (int j = 0;j < k;j++) {
            cin >> u[i][j];
        }
    }
    for (int i = 0;i < k;i++) {
        sort(v[i].begin(), v[i].end());
    }
    int is[k] = {0};
    int ans = 0;
    for (int i = 0;i < k;i++) {
        for (int j = 0;j < n;j++) {
            if (p[i] >= v[i][j].ff) {
                cnt[v[i][j].ss]++;
                is[i]++;
                if (cnt[v[i][j].ss] == k) {
                    ans++;
                    for (int l = 0;l < k;l++) {
                        p[l] += u[v[i][j].ss][l];
                    }
                    cnt[v[i][j].ss]++;
                }
            }
            else {
                break;
            }
        }
    }
    bool pos = true;
    while (pos) {
        if (pos == false) break;
        pos = false;
        for (int i = 0;i < k;i++) {
            while (is[i] < n) {
                if (p[i] >= v[i][is[i]].ff) {
                    pos = true;
                    cnt[v[i][is[i]].ss]++;
                    if (cnt[v[i][is[i]].ss] == k) {
                        ans++;
                        for (int l = 0;l < k;l++) {
                            p[l] += u[v[i][is[i]].ss][l];
                        }
                        cnt[v[i][is[i]].ss]++;
                    }
                    is[i]++;
                }
                else {
                    break;
                }
            }
        }
    }
    // for (int i = 0;i < k;i++) {
    //     for (auto x : v[i]) {
    //         cout << x.ff << " " << x.ss << endl;
    //     }
    //     cout << endl;
    // }
    // for (int i = 0;i < k;i++) {
    //     cout << is[i] << " ";
    // }
    // cout << endl;
    // for (int i = 0;i < k;i++) {
    //     cout << p[i] << " ";
    // }
    // cout << endl;
    cout << ans << '\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...