Submission #1319335

#TimeUsernameProblemLanguageResultExecution timeMemory
1319335nathlol2Topical (NOI23_topical)C++20
61 / 100
284 ms63880 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, ans;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> m;
    int r[n + 1][m + 1], u[n + 1][m + 1], a[n + 1], v[n + 1];
    memset(a, 0, sizeof a);
    memset(v, 0, sizeof v);
    for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++) cin >> r[i][j];
    for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++) cin >> u[i][j];
    if(n <= 1000){
        while(1){
            bool f = 0;
            for(int i = 1;i<=n;i++){
                if(v[i]) continue;
                bool ff = 1;
                for(int j = 1;j<=m;j++){
                    if(a[j] < r[i][j]){
                        ff = 0;
                    }
                }
                if(ff){
                    f = 1;
                    for(int j = 1;j<=m;j++){
                        a[j] += u[i][j];
                    }
                    v[i] = 1;
                    break;
                }
            }
            if(!f) break;
            ++ans;
        }
    }else{
        vector<pair<int, int>> v;
        for(int i = 1;i<=n;i++){
            v.push_back({r[i][1], u[i][1]});
        }
        sort(v.begin(), v.end());
        int cur = 0, l = -1;
        while(1){
            auto it = upper_bound(v.begin(), v.end(), make_pair(cur, LLONG_MAX)) - v.begin() - 1;
            if(it <= l) break;
            for(int i = l + 1;i<=it;i++) cur += v[i].second, ++ans;
            l = it;
        }
    }
    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...