Submission #1099204

#TimeUsernameProblemLanguageResultExecution timeMemory
1099204NoMercyTopical (NOI23_topical)C++17
100 / 100
416 ms137904 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

bool cmp (array<int, 2> a, array<int, 2> b) {
    if (a[0] == b[0]) return a[1] < b[1];
    return a[0] > b[0];
}

int32_t main () {

    ios_base::sync_with_stdio(0); 
    cin.tie(0); 
    cout.tie(0); 

    int N, M;
    cin >> N >> M;
    vector<vector<int>> r(N, vector<int> (M, 0)), u(N, vector<int> (M, 0));
    vector<int> say(N, 0), p(M, 0);
    queue<int> q;
    vector<vector<array<int, 2>>> tmp(M);
    for (int i = 0;i < N;i ++) {
        for (int j = 0;j < M;j ++) {
            cin >> r[i][j];
            if (r[i][j] == 0) {
                say[i] ++;
            }
            tmp[j].push_back({r[i][j], i});
        }
        if (say[i] == M) {
            q.push(i);
        }
    }
    for (int i = 0;i < N;i ++) {
        for (int j = 0;j < M;j ++) {
            cin >> u[i][j];
        }
    }
    for (int j = 0;j < M;j ++) {
        sort (tmp[j].begin(), tmp[j].end(), cmp);
    }
    int result = 0;
    while (q.size() > 0) {
        auto it = q.front();
        q.pop();
        result ++;
        for (int j = 0;j < M;j ++) {
            p[j] += u[it][j];
            while (tmp[j].size() > 0 && tmp[j].back()[0] <= p[j]) {
                say[tmp[j].back()[1]] ++;
                if (say[tmp[j].back()[1]] == M) {
                    q.push(tmp[j].back()[1]);
                }
                tmp[j].pop_back();
            }
        }
    }
    cout << result << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...